山东大学社会实践,甘南在线,桥式工程塑料拖链
例如下面的代码就是错误的:
list<int> lst{1,2,3,4}; list<int> lst2,lst3; copy(lst.cbegin(), lst.cend(), lst2.begin());
lst2是个空的容器,copy函数不能扩容容器lst2,所以会发生运行时错误。
list<int> lst{1,2,3,4}; list<int> lst2,lst3; copy(lst.cbegin(), lst.cend(), inserter(lst3, lst3.begin()));
迭代器 | 功能描述 |
---|---|
back_inserter | 创建一个使用push_back的迭代器 |
front_inserter | 创建一个使用push_front的迭代器 |
inserter | 创建一个使用insert的迭代器,元素插入到指定位置之前 |
//假设it是有inserter生成的迭代器 *it = val;//其效果同下面二行代码一样 it = c.insert(it, val);//it指向新加入的元素 ++it;//递增it,使它指向原来的元素
例子:
#include <iostream> #include <vector> #include <list> #include <algorithm> using namespace std; int main(){ //copy函数不会改变容器的大小,但是使用了插入迭代器后, //就会改变容器的大小了 /* list<int> lst{1,2,3,4}; list<int> lst2,lst3; //运行错误,因为lst2是空list,copy函数不会增加容器的大小 //copy(lst.cbegin(), lst.cend(), lst2.begin()); //结果:4,3,2,1 copy(lst.cbegin(), lst.cend(), front_inserter(lst2)); //结果:1,2,3,4 copy(lst.cbegin(), lst.cend(), inserter(lst3, lst3.begin())); for(auto const &s : lst2){ cout << s << " "; } cout << endl; for(auto const &s : lst3){ cout << s << " "; } cout << endl; */ //unique_copy 拷贝不重复的元素到新的容器 vector<int> ivec{1,2,1,2,3,4,3,3,3,2,2,1,1,1}; list<int> lst; sort(ivec.begin(),ivec.end()); unique_copy(ivec.cbegin(), ivec.cend(),back_inserter(lst)); for(auto const &s : lst){ cout << s << " "; } cout << endl; }
如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复
如何在没有core文件的情况下用dmesg+addr2line定位段错误
用QT制作3D点云显示器——QtDataVisualization
网友评论