문제

이것에 대한 답을 읽는 동안 의문 벡터의 객체의 기본 구성에 대해 의심의 여지가 있습니다. 테스트하기 위해 다음 테스트 코드를 작성했습니다.

struct Test
{
    int m_n;

    Test(); 

    Test(const Test& t);

    Test& operator=(const Test& t);
};

Test::Test() : m_n(0)
{
}

Test::Test(const Test& t)
{
    m_n = t.m_n;
}

Test& Test::operator =(const Test& t)
{
    m_n = t.m_n;
    return *this;
}


int main(int argc,char *argv[])
{
    std::vector<Test> a(10);
    for(int i = 0; i < a.size(); ++i)
    {
        cout<<a[i].m_n<<"\n";
    }

    return 0;
}

그리고 벡터 객체를 작성하는 동안 테스트 structs 기본 생성자가 호출됩니다. 그러나 내가 이해할 수없는 것은 STL이 객체를 초기화하는 방법입니다. 기본 생성자가 있기 때문에 Ints의 벡터와 같은 기본 데이터 유형의 벡터를 만드는 방법은 무엇입니까? 즉 벡터의 모든 int에는 값 0이 어떻게됩니까? 쓰레기가되어서는 안됩니까?

도움이 되었습니까?

해결책

Ints의 기본 생성자와 동등한 것을 사용합니다. 당신은 그것을 명시 적으로 할 수 있습니다 :

int n = int();

n을 0으로 설정합니다.

기본 구성은 벡터에 초기 크기가 제공되는 경우에만 사용되며 필요합니다. 당신이 말한 경우 :

vector <X> v;

x에 기본 생성자가 있어야 할 요구 사항은 없습니다.

다른 팁

std::vector<Type> a(10);        // T could be userdefined or basic data type

벡터는 기본적으로 호출됩니다 default 가리키는 유형의 경우 : Type()

  • int와 같은 기본 데이터 유형 인 경우 double이 있으면 int (), double () {int ()가 값 0}을 얻습니다.
  • 사용자 정의 데이터 유형이 있으면 기본 생성자가 호출됩니다.
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top