2016-07-22 1 views
1

"inside"배열을 std::vector에 가져 오려고합니다..begin() 및 .end() 반복자에서 배열 가져 오기

나는 C++을 잘 모른다. 기본적으로 배열 (첫 번째 요소 인 iirc에 대한 포인터)과 크기를 얻기위한 스 니펫을 찾고있다. 배열의 내용을 OpenACC을 통해 가속기 장치로 전송하기 때문에이 코드가 필요합니다.

내가 조작해야하는 함수에서 얻은 것은의 시작과 끝에 두 개의 RA-Iterators 인 입니다.

나는 그것들 모두가 연속적이어서는 안되지만 내가 만들어 낼 코드는 완전히 학문적 일 것이므로 지금 당장은 문제가되어서는 안된다.

+1

'vector.data()'를 의미합니까? – DimChtz

+0

문제는 내가 맥락에서 벡터 객체를 가지고 있지 않다는 것입니다. 나는 vector.begin()과 vector.end()의 결과만을 얻는다. –

답변

3

std::vector가 메모리에 연속으로 보장됩니다. (읽기 : 포인터) 당신의 주소를 얻을 수 .begin().end()에서 크기를 얻을 수

&a.first() 

더 쉽게

&*a.begin() 

또는 가진 첫번째 요소를 사용

a.end() - a.begin() 
+0

나는 당신의 답을 downvoted했습니다. 내가 투표 할 수 있도록 답을 편집 할 수 있습니까? –

1
myArray[myvector.end() - myvector.begin()] 
for (std::vector<int>::iterator it = myvector.begin(), int i = 0; it!=myvector.end(); ++it, ++i) 
     myArray[i] = myvector[i]// or whatever you want 

다음은 이터레이터를 사용하는 방법입니다. 시작 조건과 종료 조건이 있으므로 루프를 사용해야합니다.

+0

이 질문에 어떻게 대답합니까? OP는 두 개의 반복자에서 기본 데이터를 검색하는 방법을 요구하고 있으며 반복자를 사용하여 컨테이너를 반복하는 방법을 간단히 보여줍니다. – Holt

+0

@Holt 제 편집이 더 명확하게 나타 납니까? –

+0

이것은 벡터의 데이터를 배열로 복사합니다.이 배열도 잘 작동하지만, 제 위치에서 작업해야합니다. 그래서 저에게는 옵션이 아닙니다. 귀하의 대답은 다른 사람들에게도 도움이 될 수 있습니다. –

2

전체 벡터를 원할 경우 vector.data()은 (는) 친구입니다. 당신이 그것의 일부만 필요한 경우

: 그 문제가 될해서는 안

std::vector<X>::iterator it1 = ... , it2 = ...; 
X* item = &(*it1); 
int elements = it2 - it1; 
관련 문제