2012-01-21 4 views
0

으로 변환하려면 다음과 같은 arr 데이터가있는 벡터를 초기화하고 싶습니다. 문자열 형식의 배열을 초기화하고 해당 값을 벡터 문자열로 복사해야합니다. 이것은 내가 어떻게하는지입니다문자열 배열을 문자열 형식의 벡터

는 오류 내가 int 배열 및 INT 유형의 벡터를 위해했을

string arr[6][8]={ 
"AAAAAAAA", 
"ABWBWBWA", 
"ABWBWBWA", 
"ABWBWBWA", 
"ABWBWBWA", 
"AAAAAAAA"}; 
vector<string> v(arr,arr+sizeof(arr)/sizeof(string)); 

을 많이 제공합니다. 이와 같이 ,

int vv[]={0,0,0,8}; 
vector<int> v(vv,vv+sizeof(vv)/sizeof(int));   

및 그것의 작동하지 않는 입력이 유형하지만 문자열을 완벽하게 작동합니다.

답변

4

어레이가 의미가 없습니다. 그것은해야한다 : 예상대로

std::string arr[] = { 
    "AAAAAAAA", 
    "ABWBWBWA", 
    "ABWBWBWA", 
    "ABWBWBWA", 
    "ABWBWBWA", 
    "AAAAAAAA" }; 

그런 다음

std::vector<std::string> v(arr, arr + sizeof(arr)/sizeof(std::string)); 

작동합니다.

6을 수정하고 v(arr, arr + 6);라고 할 수 있습니다. arr의 유형은 실제로하지 string하지만 char[6][8]입니다

std::vector<std::string> v { 
    "AAAAAAAA", 
    "ABWBWBWA", 
    "ABWBWBWA", 
    "ABWBWBWA", 
    "ABWBWBWA", 
    "AAAAAAAA" 
}; 
+0

int 유형의 경우에도 그렇게 할 수 있습니까? –

+0

표준 : : 벡터 V { "AAAAAAAA" "ABWBWBWA" "ABWBWBWA" "ABWBWBWA" "ABWBWBWA" "AAAAAAAA" }; –

+0

오류 : 스칼라 개체 'v'는 이니셜 라이저에서 하나의 요소가 필요합니다. –

0

그러나, 당신은 단지 말할 것 ++ 현대 C에서

는 (당신이 char[9] 객체와이 배열의 멤버를 초기화하기 때문에이 컴파일 홀수 : 문자열 리터럴은 종료 문자 '\ 0'을 포함합니다. 정적 크기 배열을 제대로 얻으려면 항상 이 아닌이 C 해킹 sizeof()을 사용하는 것이 좋습니다. 대신,이 같은 함수 템플릿을 사용 (당신이 크기를 사용했기 때문에 사실, 난 그냥 size() 템플릿을 포함, 반복자를 얻을 수 begin()end()를 사용하여이 우수) :

template <typename T, int Size> int size(T (&array)[Size]) { return Size; } 
template <typename T, int Size> T* begin(T (&array)[Size]) { return array; } 
template <typename T, int Size> T* end(T (&array)[Size]) { return array + Size; } 
... 
std::vector<std::string> v(begin(arr), end(arr)); 
C에서

++ 2011 begin()end() 함수는 standand C++ 라이브러리의 일부입니다. 물론 C++ 2011에서는 이니셜 라이저 목록을 직접 사용할 수 있습니다.