C ++,复制设置为vector

我需要将std::set复制到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 

哪里有问题?

你需要使用一个back_inserter

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

std::copy不会将元素添加到要插入的容器中:它不能; 它只有一个迭代器到容器中。 因此,如果将输出迭代器直接传递给std::copy ,则必须确保它指向的范围至less足以容纳input范围。

std::back_inserter创build一个输出迭代器,它调用每个元素的容器上的push_back ,因此每个元素都被插入到容器中。 或者,您可以在std::vector创build足够数量的元素来保存要复制的范围:

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

或者,你可以使用std::vector范围构造函数:

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

只需要使用迭代器的向量的构造函数:

 std::set<T> s; //... std::vector v( s.begin(), s.end() ); 

假设你只想要v中的s的内容,并且在将数据拷贝到v之前没有任何内容。

你没有在你的vector对象中保留足够的空间来保存你的集合的内容。

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

这里是使用vector::assign的另一种select:

 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()));