2010-07-12 4 views
1

간단한 질문인데, unsigned char std::vector을 사용하고 에 length이라는 문자를내는 함수를 작성하는 방법은 무엇입니까? 감사!부호없는 char std :: vector에서 unsigned char []?

아, 내 문제는 std :: vector에 대한 내 지식이었습니다. 나는 항상 std :: vector가 선형 적으로 그 값을 유지하지 않는다고 믿었다. 그게 내 많은 문제를 해결해 줬어. 감사!

+4

이유는 단지 V [0]'기본'문자 []'와'V에 대한 포인터를 얻기 위해'& 사용할 수 없습니다. size()'길이를 얻으려면? 데이터를 다른 배열에 복사해야합니까? 최종 목표는 정확히 무엇입니까? –

+0

'data()'메소드를 사용할 수 있습니다. & v [0]과 동일한 작업을 수행하지만 불행히도 표준이 아닙니다. http://msdn.microsoft.com/en-us/library/dd647618.aspx – Gunslinger47

답변

5

그냥 사용 : &v.front().

사본이 필요한 경우 std::copy을 사용하십시오.

+1

또는 "STL-sequence-container-requirement-version" '& v [0]'. –

+0

그래, 나는 그들이 같다고 생각한다. 나는 항상 v.front() 변종을 선호했지만 v> [0]이 더 많이 사용된다는 것을 배웠다. –

+0

내가 더 많이 사용한다고 생각하는 유일한 이유는 표준에서 사용되는 구문이라는 것입니다. –

2

불행하게도, 그것은 하나의 라이너 아니지만, 너무 나쁘지 않아 :

std::vector<unsigned char> v(10); 
unsigned char* a = new unsigned char[v.size()]; 
std::copy(v.begin(), v.end(), a); 
delete [] a; 
+1

기본적으로 안전을 취하는 목적은 무엇입니까? 절대 명시 적으로 삭제해야하는 곳에'new'를 사용하지 마십시오. 이 경우'vector '를 사용하면 ... 이제 벡터를 다른 벡터로 이동했습니다. – GManNickG

+0

@Gman - Dunno, OP 질문. 어쩌면 그는 레거시 API에 소유권을 넘겨 줄 필요가 있습니다. (밝혀졌습니다. 그는 단지'v.front()'가 필요했습니다) – Stephen

관련 문제