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