我正在尝试将矢量数据从sample
复制到Y
,如下所示
std::map<std::string, std::vector<double > >sample;
std::map<std::string, std::vector<double > >::iterator it1=sample.begin(), end1=sample.end();
std::vector<double> Y;
并使用以下代码:
while (it1 != end1) {
std::copy(it1->second.begin(), it1->second.end(), std::ostream_iterator<double>(std::cout, " "));
++it1;
}
它打印输出ok,但是当我用下面的代替上面的std :: copy块时,我得到一个段错误。
while (it1 != end1) {
std::copy(it1->second.begin(), it1->second.end(), Y.end());
++it1;
}
我只想将it1-&gt;秒的内容复制到Y.为什么它不起作用,我该如何解决?
答案 0 :(得分:12)
显然,您希望将对象插入到矢量中。但是,std::copy()
只是传递迭代器并写入它们。 begin()
和end()
迭代器获得的迭代器不会进行任何插入。你想要使用的是这样的:
std::copy(it1->second.begin(), it1->second.end(), std::back_inserter(Y));
std::back_inserter()
函数模板是迭代器的工厂函数,在其参数上使用push_back()
来追加对象。
答案 1 :(得分:0)
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main() {
// your code goes here
vector<int> vec;
vector<int> test;
vec.push_back(1);
//test.push_back(0);
copy(vec.begin(),vec.begin()+1,test.begin());
cout << *(test.begin());
return 0;
}
<强>输出: 运行时错误时间:0内存:3424信号:11
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main() {
// your code goes here
vector<int> vec;
vector<int> test;
vec.push_back(1);
test.push_back(0);
copy(vec.begin(),vec.begin()+1,test.begin());
cout << *(test.begin());
return 0;
}
<强>输出:强> * 成功时间:0记忆:3428信号:0 *
<强> 1 强>
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main() {
// your code goes here
vector<int> vec;
vector<int> test(5);
vec.push_back(1);
//test.push_back(0);
copy(vec.begin(),vec.begin()+1,test.begin());
cout << *(test.begin());
return 0;
}
成功时间:0记忆:3428信号:0
<强> 1 强>
原因是你没有初始化向量,vector.begin()指向某个受限制的地方! 当你使用back_inserter(vector)时,它会返回一个内部使用a的back_insert_interator vector.push_back而不是*(deference)操作。所以back_inserter有效!