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 容器类共享公共接口,只要学会其中一种类型就能运用另一种类型.每种容器提供一组不同的时间和功能这种方案,通常不需要修改代码,秩序改变类型声明,每一种容器 ...
随机推荐
- 搭建企业级PPTP服务器
本文收录在企业项目实战系列 一.VPN 介绍 1.介绍 虚拟私人网络(英语:Virtual Private Network,缩写为VPN)是一种常用于连接中.大型企业或团体与团体间的私人网络的通讯方法 ...
- Ansible剧本介绍及使用演示(week5_day2)--技术流ken
Ansible剧本编写说明 一. 缩进 yaml 的缩进要求比较严格.一定不能使用tab键 注意:编写yaml文件,就忘掉shell的tab吧. 二. 冒号 每个冒号后面一定要有一个空格 注意:1. ...
- oracle10G/11G官方迅雷下载地址合集
原文链接:https://blog.csdn.net/zlsunnan/article/details/8058235 ORACLE11GR2 Oracle Database 11g Release ...
- linux磁盘管理增加,扩容
一.磁盘空间不足,添加新的磁盘 一般来说,当我们在服务上插入新的磁盘时,服务器是会对磁盘进行识别的.但是,有的时候服务器并没有对这些新插入的磁盘进行识别.这时,我们可以通过重启服务器,来使服务器重新加 ...
- c# partial 关键字的使用
C# 2.0 引入了局部类型的概念.局部类型允许我们将一个类.结构或接口分成几个部分,分别实现在几个不同的.cs文件中. 局部类型适用于以下情况: (1) 类型特别大,不宜放在一个文件中实现.(2) ...
- mysql使用存储过程&函数实现批量插入
写这边文章的目的,是想结合mysql 存储过程+函数完成一个批量删除的功能吧...正好也好加深下对procedure和function的熟练操作吧...废话不多说,我就直接上表结构啦哈,如下: cre ...
- Java集合性能分析-疯狂Java讲义
一.各Set实现类的性能分析 HashSet和TreeSet是Set的两个典型实现.HashSet的性能总是比TreeSet好(特别是最常用的添加.查询元素等操作),因为TreeSet需要额外的红黑树 ...
- The JRE_HOME environment variable is not defined correctly This environment
昨天启动tomcat还好好的,今天不知道抽什么风,cmd中报错: The JRE_HOME environment variable is not defined correctly This env ...
- C#设计模式之十一享元模式(Flyweight Pattern)【结构型】
一.引言 今天我们要讲[结构型]设计模式的第六个模式,该模式是[享元模式],英文名称是:Flyweight Pattern.还是老套路,先从名字上来看看.“享元”是不是可以这样理解,共享“单元”,单元 ...
- 如何用STAR法则来回答「宝洁八大问」
掌握宝洁八大问,其实就是掌握了半个求职季 每年高峰期,很多同学会问到关于宝洁八大的问题,如何准备.怎么讲故事.如何体现自己的特点等等.针对同学们的提问,分享一篇关于如何回答好宝洁八大问的文章,希望能够 ...