c/c++ 标准顺序容器 之 push_back,push_front,insert,emplace 操作
c/c++ 标准顺序容器 之 push_back,push_front,insert,emplace 操作
关键概念:向容器添加元素时,添加的是元素的拷贝,而不是对象本身。随后对容器中元素的任何改变都不会影响到原始对象,反之亦然。
关键警告:因为vector,deque,string的内存存储都是在连续的空间上,所以向vector,deque,string的头尾以外的位置插入元素或者删除元素,会产生元素的移动,就会非常耗时,这时就应该考虑使用双向链表list,但是list不支持下标操作
知识点
1,在容器的尾部插入元素push_back,对应代码里的test1
2,在容器的头部插入元素push_front,对应代码里的test2
3,在容器的任意位置插入单个元素insert ,对应代码里的test3
4,在容器的任意位置插入多个元素insert,对应代码里的test4
5,insert返回新添加的第一个元素,对应代码里的test5
6,emplace_front,emplace,emplace_back,对应代码里的test6
#include <iostream>
#include <vector>
#include <string>
#include <list>
#include <forward_list>
#include <deque>
using namespace std;
int main(){
//test1 push_back
//forward_list没有push_back方法
/*
vector<string> container;
//list<string> container;
//deque<string> container;
//forward_list<string> container;//forward_list没有push_back方法
string word;
while(cin >> word){
container.push_back(word);
}
for(auto const &s : container){
cout << s << " ";
}
cout << endl;
string s("abc");
s.push_back('d');
cout << s << endl;
*/
//test2 push_front
/*
//list<string> container;
deque<string> container;
string word;
while(cin >> word){
container.push_front(word);
}
for(auto const &s : container){
cout << s << " ";
}
cout << endl;
*/
//test3 insert单个元素
//vector和string虽然不支持push_front,但是支持在头部insert
/*
//vector<string> container{"aa","bb","cc"};
//list<string> container{"aa","bb","cc"};
deque<string> container{"aa","bb","cc"};
//vector<string>::iterator it = container.begin();
//list<string>::iterator it = container.begin();
deque<string>::iterator it = container.begin();
container.insert(++it, "ddd");
for(auto const &s : container){
cout << s << " ";
}
cout << endl;
string str("abc");
string::iterator it1 = str.begin();
str.insert(++it1, 'd');
for(auto const &s : str){
cout << s << " ";
}
cout << endl;
*/
//test4 insert范围
/*
vector<string> v{"aa","bb","cc"};
list<string> sl{"dd","ff"};
sl.insert(sl.begin(), v.end() - 2, v.end());
for(auto const &s : sl){
cout << s << " ";
}
cout << endl;
sl.insert(sl.end(), {"ee","gg"});
for(auto const &s : sl){
cout << s << " ";
}
cout << endl;
*/
//test5 使用insert的返回值
//插入到指定的位置之前,返回新添加的第一个元素
/*
list<string> sl;
auto it = sl.begin();
string word;
//下面的代码,相当于push_front
while(cin >> word){
it = sl.insert(it,word);
}
for(auto const &s : sl){
cout << s << " ";
}
cout << endl;
*/
//test6 emplace_front,emplace,emplace_back
//直接在容器里构造对象
class Test{
public:
Test(const string& d = "", int s = 2) : name(d), age(s){}
string getName()const{
return name;
}
int getAge()const{
return age;
}
private:
string name;
int age;
};
list<Test> vc;
vc.emplace_back("aa",10);
vc.emplace_front("bb",12);
vc.emplace(vc.begin(), "cc", 11);
for(auto const &s : vc){
cout << s.getName() << ":" << s.getAge() << endl;
}
}
c/c++ 学习互助QQ群:877684253
本人微信:xiaoshitou5854
c/c++ 标准顺序容器 之 push_back,push_front,insert,emplace 操作的更多相关文章
- c/c++ 标准顺序容器 容器的访问,删除 操作
c/c++ 标准顺序容器 容器的访问,删除 操作 pop_front:vector,string不支持 pop_back:forward_list不支持 知识点 1,front, back, at 成 ...
- [C++ Primer] 第9章: 顺序容器
顺序容器概述 顺序容器的类型有: 类型 说明 vector 可变长度数组. 支持快速随机访问. deque 双端队列. 支持快速随机访问. list 双向链表. 只支持双向顺序访问. forward_ ...
- CH9 顺序容器
本章主要介绍了标准库顺序容器,包括 顺序容器的公共接口,如构造函数,添加/删除操作等 利用迭代器访问容器 不同顺序容器的差异 string的特殊操作 容器适配器,如栈,队列等 9.1 “按字典序插入到 ...
- 【c++ Prime 学习笔记】第9章 顺序容器
一个容器是特定类型对象的集合 顺序容器中元素的顺序与其加入容器的位置对应 关联容器中元素的顺序由其关联的关键字决定,关联容器分为有序关联容器和无序关联容器 所有容器类共享公有接口,不同容器按不同方式扩 ...
- C++ Primer : 第九章 : 顺序容器的操作以及迭代器失效问题
顺序容器的添加.访问.删除操作以及forward_list的特殊操作,还有迭代器失效问题. 一.向容器添加元素 // array不支持这些操作 // forward_list有自己撰于的版本的inse ...
- C++ 顺序容器基础知识总结
0.前言 本文简单地总结了STL的顺序容器的知识点.文中并不涉及具体的实现技巧,对于细节的东西也没有提及.一来不同的标准库有着不同的实现,二来关于具体实现<STL源码剖析>已经展示得全面细 ...
- C++ Primer 第九章 顺序容器
由于书籍上写的已经很经典了,故大部分用图片的形式来阐述概念,代码纯手打进行验证. 1.顺序容器类型:vector.deque.list.forword_list.array.string. 2.顺序容 ...
- C++ 顺序容器
<C++ Primer 4th>读书笔记 顺序容器内的元素按其位置存储和访问.容器类共享公共的接口,每种容器类型提供一组不同的时间和功能折衷方案.通常不需要修改代码,只需改变类型声明,用一 ...
- 顺序容器:vector,deque,list
1.顺序容器:vector,deque,list 容器类共享公共接口,只要学会其中一种类型就能运用另一种类型.每种容器提供一组不同的时间和功能这种方案,通常不需要修改代码,秩序改变类型声明,每一种容器 ...
随机推荐
- 为什么你作为一个.NET的程序员工资那么低?
最近看到很多抱怨贴,也许有一定的道理,但是你想过没,为什么大部分.NET程序员工资相对低?我个人是这么看的: 大批半罐子水的程序员,永远被局限在.NET的原始的小圈圈里.前端不会(你放弃了一项很重要的 ...
- NTP时间服务器实战应用详解-技术流ken
简介 在搭建集群服务中,要保证各节点时间一致,NTP时间服务器就成为了一个好帮手了. 系统环境 系统版本:centos6.7 服务器IP:10.220..5.166/24 客户端IP:10.220.5 ...
- [PHP] PHP多进程处理tcp连接
<?php if(($sock = socket_create(AF_INET, SOCK_STREAM, 0)) < 0) { echo "failed to create s ...
- 《Unix网络编程》读书笔记
UDP和TCP UDP(User Datagram Protocol,用户数据报协议)是一个无连接协议,不保证UDP数据报会到达其最终目的地,不保证各数据报的先后顺序跨网络后保持不变,也不保证每个数据 ...
- ES6核心特性
摘要:聊JS离不开ES6啊! 原文:ES6核心特性 作者:ljianshu 前言 ES6 虽提供了许多新特性,但我们实际工作中用到频率较高并不多,根据二八法则,我们应该用百分之八十的精力和时间,好好专 ...
- idea护眼色设置
idea右侧编辑区设置护眼色
- js正则表达式 URL格式匹配详解
0.URL格式 protocol :// hostname[:port] / path / [;parameters][?query]#fragment [;parameters]没见过 这里就不做相 ...
- input 属性为 number,maxlength不起作用如何解决?
<input type="text" maxlength="5" /> 效果ok, 当 <input type="number ...
- 发现一个微博图床API和图片上传代码
网上寻到一款微博图床的插件,然后顺藤摸瓜找到了原作者的API代码. API文件: <?php /** * 上传图片到微博图床 * @author Youngxj & mengkun &a ...
- vue从入门到进阶:Class 与 Style 绑定(四)
绑定 HTML Class 对象语法 ①.添加单个class: <div v-bind:class="{ active: isActive }"></div> ...