C ++,将副本设置为向量

我需要将
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
,则必须确保它指向一个至少足以容纳输入范围的范围。
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()); 
    
只需使用构造函数来获取迭代器的向量:
std::set<T> s;

//...

std::vector v( s.begin(), s.end() );
假设您只想要v中的s内容,并且在将数据复制到v之前没有任何内容。     
这是使用
vector::assign
的另一种选择:
theVector.assign(theSet.begin(), theSet.end());
    
您没有在矢量对象中保留足够的空间来保存集合的内容。
std::vector<double> output(input.size());
std::copy(input.begin(), input.end(), output.begin());
    
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())); 
    

要回复问题请先登录注册