2012-06-30 2 views
1

나는 이런 일이 :표준 : : 벡터

typedef int customType[10]; 

을 내가 원하는이

std::vector<customType*>& myFunc(); 

그러나 일부 문제가있는 같은 기능.

IntelliSense: a value of type "int *" cannot be assigned to an entity of type "customType*" 

2) :

1) 나는 및

std::vector<customType*> A; 
//some code to get length 
for (i = 0; i < length; i++) 
{ 
    A[i] = new customType; 
} 

을하고 오류로 인해 잘못이다 (I을) 벡터에 customType에 모든 포인터에 대한 메모리를 할당해야 일반적으로 이러한 데이터를 저장하는 좋은 방법입니까? 어쩌면 나는 모든 1 차원의 배열 한 줄에 저장하고

A[i*innerLength+j]

요소에 액세스 할 수 같은 것을 사용 하는가?

+0

왜 typedef가 필요합니까? 왜 그냥 int [10]을 사용할 수 없습니까? – Linuxios

+0

통 신당 용. 사용자 정의 유형은 코드에서 의미가 있으며 ('customType'이 아닌) 코드를보다 쉽게 ​​읽을 수 있습니다. 또한'std :: vector '을 사용해도 괜찮습니까? –

+0

예. 'int [10]'은 실제로는 단지'const int *'입니다. – Linuxios

답변

1

일반적으로 아래와 같은 내용을 사용하고 배열 색인을 직접 작성하는 것이 좋습니다.

std::vector<int> vals(row_size*col_size, 0); 

정말 큰 크기에서는 분해하는 것이 좋습니다. 블록에 할당 할 수있는 연속 된 메모리가 많습니다. "Really large"는 꽤 주관적이며 대부분의 사람들이 기대하는 것보다 훨씬 더 큰 사이즈로 벗어날 수 있습니다. 프로파일 러가 문제가 발생하면 알려줍니다.

C++ 11에 액세스 할 수 있으면 다른 옵션이 될 수 있습니다.

TEST(array) 
{ 
    typedef std::array<int,10> Foo; 
    typedef std::vector<Foo> Foos; 
    Foos foos(10, Foo()); 
} 
2

귀하의 코드가 A[i] 유형 int (*)[10]로하고 new 표현 유형 int*의 때문에 작동하지 않습니다 어느 클래스 또는 구조체의 배열을 std::vector<int*>A를 변경하거나 포장 : 다음

struct customType { 
    int data[10]; 
}; 

을 수행 할 수 있습니다 std::vector<customType> (선호) 또는 std::vector<customType*>을 사용하십시오.

std::vector<int[10]>std::vector에 대한 요구 사항 인 C 및 C++의 배열을 할당 할 수 없기 때문에 효과가 없습니다.