我有一些私有类成员,表示std::deque包含一些数据的随机访问数组:
std::vector<std::deque<SomeDataClass> > someMember;
Run Code Online (Sandbox Code Playgroud)
我想提供一个公共类方法,它返回可迭代的数据结构,包含我的deques数组中的所有数据元素:
std::deque<SomeDataClass> someMethod();
Run Code Online (Sandbox Code Playgroud)
我希望这个方法遍历vector中的所有deques并复制它上面的每个元素到本地std :: deque,最终按值返回本地std :: deque.我想用C++ 11实现这个方法auto和std::begin(),std::end():
std::deque<SomeDataClass> MyClassName::someMethod(){
std::deque<DirectedEdge> allDataItems;
std::deque<DirectedEdge>::iterator deqIter = allDataItems.begin();
for(auto it = std::begin(someMember); it != std::end(someMember); ++it){
std::copy(std::begin(*it), std::end(*it), deqIter);
}
return allDataItems;
}
Run Code Online (Sandbox Code Playgroud)
我在deque标头中的运行时收到数据访问冲突未处理的异常错误.什么是错误?
Rei*_*ica 13
std::copy()要求目标范围足够大以容纳副本,但是allDataItems为空.你必须allDataItems提前预留空间(但这是不可能的std::deque).您应该使用std::back_inserter(定义<iterator>)代替:
std::deque<SomeDataClass> MyClassName::someMethod(){
std::deque<DirectedEdge> allDataItems;
for(auto it = std::begin(someMember); it < std::end(someMember); ++it){
std::copy(std::begin(*it), std::end(*it), std::back_inserter(allDataItems));
}
return allDataItems;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
18117 次 |
| 最近记录: |