【C++ Primer 第10章】 10.4.1 插入迭代器
正文
目录
• 反向迭代器
插入迭代器
插入迭代器,这些迭代器被绑定到一个容器上,可以向容器插入元素。
头文件为:#include<iterator
it=t 在it指定的当前位置插入值t。假定c是it绑定的容器,依赖于插入迭代器的不同种类,此赋值分别调用c.push_back(t)、c.push_front(t)或c.insert(t,p),其中p为传递给inserter的迭代器位置
*it,++it,it++ 这些操作虽然存在,但不会对it做任何事情。每个操作都返回it
• back_inserter 创建一个使用push_back的迭代器。
• front_inserter创建一个使用push_front的迭代器。
• inserter创建一个使用insert的迭代器。此函数接受第二个参数,这个参数必须是一个指向给定容器的迭代器。元素被插入到指定的迭代器所表示的元素之前。
【注意】只有容器支持push_back才可以使用back_inserter, 同理,只有容器支持push_front时才可以使用front_inserter
当调用inserter时,得到一个迭代器,接下来使用它时,会将元素插入到这个迭代器所指向的元素之前的位置。即,如果it是由inserter生成的迭代器,则下面这样的赋值语句:
*it = val;
it = c.insert(it, val); ++it; // 递增it使它指向原来的元素
list<int> lst1 = {1, 2, 3, 4}; list<int> lst2, lst3; copy(lst.begin(), lst.end(), front_inserter(lst2)); //拷贝完成之后, lst2包含4 3 2 1 copy(lst.begin(), lst.end(), inserter(lst3, llst3.begin())); //拷贝完成之后, lst2包含1 2 3 4
代码:
1 #include<iostream> 2 #include<algorithm> 3 #include<vector> 4 #include<list> 5 #include<iterator> 6 using namespace std; 7 8 int main() 9 { 10 vector<int> vi = { 1, 2, 3, 4, 5, 6, 7, 8, 9 }; 11 list<int> li1, li2, li3; 12 unique_copy(vi.begin(), vi.end(), inserter(li1, li1.begin())); 13 for (auto v : li1) 14 cout << v << " "; 15 cout << endl; 16 17 unique_copy(vi.begin(), vi.end(), back_inserter(li2)); 18 for (auto v : li2) 19 cout << v << " "; 20 cout << endl; 21 22 unique_copy(vi.begin(), vi.end(), front_inserter(li3)); 23 for (auto v : li3) 24 cout << v << " "; 25 cout << endl; 26 27 return 0;
输出结果:
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~