c++ 배열 - C ++, 벡터로 복사 세트




3 Answers

back_inserter 를 사용해야합니다.

std::copy(input.begin(), input.end(), std::back_inserter(output));

std::copy 는 삽입중인 컨테이너에 요소를 추가하지 않습니다. 컨테이너에 반복자 만 있습니다. 이 때문에 출력 반복기를 std::copy 직접 전달하는 경우 입력 범위를 유지할 수있을만큼 큰 범위를 가리키는 지 확인해야합니다.

std::back_inserter 는 각 요소에 대해 컨테이너에 push_back 을 호출하는 출력 반복자를 생성하므로 각 요소가 컨테이너에 삽입됩니다. 또는 복사 할 범위를 유지하기 위해 std::vector 에 충분한 수의 요소를 만들 수 있습니다.

std::vector<double> output(input.size());
std::copy(input.begin(), input.end(), output.begin());

또는 std::vector 범위 생성자를 사용할 수 있습니다.

std::vector<double> output(input.begin(), input.end()); 
vector copy

std::vector 로 복사 :

std::set <double> input;
input.insert(5);
input.insert(6);

std::vector <double> output;
std::copy(input.begin(), input.end(), output.begin()); //Error: Vector iterator not dereferencable

문제가 어디에 있습니까?




vector::assign 사용하는 또 다른 방법은 다음과 같습니다.

theVector.assign(theSet.begin(), theSet.end());



std::copy 는 빈 컨테이너에 삽입하는 데 사용할 수 없습니다. 그렇게하려면 insert_iterator를 다음과 같이 사용해야합니다.

std::set<double> input;
input.insert(5);
input.insert(6);

std::vector<double> output;
std::copy(input.begin(), input.end(), inserter(output, output.begin())); 



Related

c++ copy stdvector stdset