2016-08-03 3 views
-1

질문을하기 전에이 주제가 많이 논의되었지만 다시 한번 대부분의 답변을 살펴보면서 적절한 방법을 찾지 못했다는 사실을 알고 있음을 미리 언급하겠습니다. 내가 원하는 것을 성취해라. (아마 내가 주어진 anwers에서 sth를 놓 쳤기 때문에). 그래서 전역 범위 여야한다는 점에서 벡터의 20 배 크기의 벡터를 생성하고 싶다고합시다 (이 크기는 각각 10 개라고 말합니다). 이것은 클래스 내부에서 이루어 지므로 이러한 벡터의 벡터가 수업).오브젝트 벡터 초기화

for (int i =0; i<20; i++) 
vector<A> * vec_of_class = new vector<A>(10); 
/*where A is the class and I use new to have them in the heap, 
so that they won't be local */ 

지금, 나는 이것이 내가 그들을 을 처리하고 내가 그들을 삭제 preper 있는지 확인에 추가 자르해야한다는 의미 알고 있지만, 나는 : 그래서, 다음이 유효한 경우 정말 확실하지 않다 내가하는 작업이 유효한지 확실하지 않습니다. 일반적으로 전역 범위에서 사용할 수있는 객체 A의 20 가지 벡터를 초기화하려고합니다 (작업은 다른 클래스의 함수에서 발생합니다). 객체의 벡터 벡터 A,하지만이 작업을 올바르게 수행하는 방법 (다른 클래스의 본문 함수 내에서 객체 A의 20 가지 다른 벡터를 초기화하고 전역 적으로 사용하는 방법)을 찾고 싶습니다. 제 질문은 혼란스럽지 않고 여기에 도움을 줄 수 있기를 바랍니다.

+0

그래, 그게 내가 할 수있는 일이지만, 그럼 어떻게 제대로 할 수 있니? – user3111197

+1

왜 그냥 벡터 > vec_of_class (20, 벡터 (10)); – DimChtz

+0

당신이 다음과 같은 클래스 멤버를 원한다고 생각합니다 :'std :: vector > member {20, std :: vector (10)};'. Et voila, 각각 10 요소의 20 벡터. –

답변

4

벡터를 포함하여 표준 컨테이너를 동적으로 할당 할 때 절대로 안됩니다. 따라서 std::vector<> = new <>은 항상 잘못되었습니다.

벡터를 초기화하려면 다양한 기법을 사용할 수 있습니다. 여기처럼, 초기화리스트는 특히 알아두면 편리 :

std::vector<int> vec{10, 20, 30, 40, 50}; 
+0

벡터가 맞습니까? vec = {1020304050}; ? –

+0

@OmidCompSCI 둘 다 유효합니다. – DimChtz

+0

@OmidCompSCI Google _uniform initialisation_. –

0

그래서, 쉽게

(크기 열 각각의 말) 20 배를 객체의 벡터를 생성하고 싶은 말은. 사용 :

std::vector<std::vector<A>> my_data{20, std::vector<A>{10}}; 

글로벌 범위이어야한다 (의미에서이 클래스 내에 이루어집니다 그리고 난 개체의 이러한 벡터는 클래스 외부에서 전달하려는).

여기서 수행하고자하는 작업에 대한 명확한 그림이 없습니다.

클래스 내에서 무언가가 완료되면 static 멤버 함수 또는 일반 멤버 함수에서 수행 할 수 있습니다. static 멤버 함수를 사용해야하는 것 같지만 잘 모르겠습니다. 당신이 static 멤버 함수를 사용하는 경우

, 내가 제안 :

std::vector<std::vector<A>> const& TheClass::get_my_data() 
{ 
    static std::vector<std::vector<A>> my_data{20, std::vector<A>{10}}; 
    static bool inited = false; 
    if (!inited) 
    { 
     // Set the values of the elements in my_data 
     // ... 

     inited = true; 
    } 
    return my_data; 
} 

정기적 멤버 함수를 사용하는 경우, 내가 생성자에서 my_data을 채우고 함수에서 돌아 좋습니다.

// Need to make my_data a member variable 
TheClass::TheClass() : my_data{20, std::vector<A>{10}} 
{ 
    // Set the values of the elements in my_data 
    // ... 
} 

std::vector<std::vector<A>> const& TheClass::get_my_data() const 
{ 
    return my_data; 
}