2011-01-21 3 views
6

파일 내용을 char 배열로 읽은 다음 벡터의 일부 데이터를 벡터로 읽습니다. 어떻게 문자 배열의 범위를 벡터에 복사 할 수 있습니까? vector와 char 배열은 모두 같은 타입 (unsigned char)이다.char 배열의 데이터 범위를 벡터로 복사하는 방법은 무엇입니까?

현재 코드는 다음과 같이 진행됩니다

int p = 0; 

for(...){ 
    short len = (arr[p+1] << 8) | arr[p+0]; 
    p+=2; 
    ... 
    for(...len...){ 
     vec.push_back(arr[p]); 
     p++; 
    } 
} 

내가 어떻게 push_back와 루프를 놓는 방법으로이 문제를 개선하기 위해시겠습니까? 물론

vec.insert(vec.end(), arr, arr+len); 

당신이 원하는 무엇을 아마 더 가까이되는, 또한 assign()있다 : 벡터에 무언가를 덧붙이

답변

17

insert() 멤버 함수를 사용하여 수행 할 수 있습니다

vec.assign(arr, arr+len); 

그러나 궁금한 점을 읽은 이유는 처음에 C 배열을 읽고 벡터로 내용을 복사하는 것입니다. 바로 벡터를 읽을 수있을 때입니다. std::vector<>은 데이터를 하나의 인접한 메모리 블록에 보관해야하며 첫 번째 요소의 주소를 사용하여이 블록에 액세스 할 수 있습니다.

std::size_t my_read(char* buffer, std::size_t buffer_size); 

vec.resize(appropriate_length); 
vec.resize(my_read_func(&vec[0], vec.size())); 

대신 &vec[0] 당신은 또한 &*vec.begin()에 의해 첫 번째 요소의 주소를 얻을 수 : 그냥 당신이 벡터에 충분한 공간이 있는지 확인하십시오. 그러나 어느 방법을 사용하든 반드시 이어야하며 벡터에는 적어도 하나의 요소가 이어야합니다.. 두 가지 방법 중 어느 것도 디버그 빌드에 대해 수행 할 수 있지만이를 확인하는 데 필요한 방법은 없으며이 두 가지 방법 모두 실패 할 때 두려움이있는 정의되지 않은 동작을 호출합니다.

+0

동시에 두 곳에서 동일한 파일의 데이터를 읽으므로 버퍼로 읽어야합니다. 이 할당은 작동하지 않는 것 같습니다 :'vec.assign (arr + p, arr + p + len);'(정확합니까? 적어도 작동합니다) – Newbie

+2

@Newbie : 아무도 그것이 올바른지 알 수 없습니다. 당신은 완전한 코드를 게시하지 않습니다 ... OP의 코드는 또한 당신이하려고하는 것을 추측해야만하는 구멍으로 가득차 있습니다. – etarion

+0

@etarion : 정말요? 내가 보여준 그 코드는 arr [] 배열과 관련된 모든 것이 중요했습니다. – Newbie

관련 문제