c++之旅:模板库中的容器
容器
C++中的容器包括array, vector, list,map,set
数组
array不可变长,创建时其大小就固定了,array中可以存储各种数据类型包括对象,不过array是在栈上分配的,如果存储的数据量比较大可能导致栈溢出
#include <string>
#include <array>
#include <iostream>
using namespace std;
int main(int argc, char **argv) {
array<string, 5> arrString = {"1", "2", "3", "4", "5"};
array<int, 4> arrInt = {1,2,3,4};
for (string str : arrString)
cout << str << endl;
for (int i : arrInt)
cout << i << endl;
}
vector
vector是在堆上创建的,所以其存储容量是无限的。其底层先通过malloc分配一定的空间,如果空间不够了通过realloc重新分配,所以vector底层本质是数组
#include <vector>
#include <iostream>
using namespace std;
int main(int argc, char **argv) {
vector<int> myVector;
for (int i = 1; i<11; i++) {
myVector.push_back(i); //尾部插入元素
}
//返回尾部元素
cout << myVector.back() << endl;
//获取10处的元素
cout << myVector.at(9) << endl;
//迭代访问
for (int i : myVector)
cout << i << endl;
}
list
list底层使用链表来实现的,其成员函数和vector大部分是一样的
#include <list>
#include <iostream>
using namespace std;
int main(int argc, char **argv) {
list<int> myList;
for (int i = 1; i<11; i++) {
myList.push_back(i);
}
//返回尾部元素
cout << myList.back()<< endl;
//在第8个位置插入100
//创建迭代器(本质是指针)
std::list<int>::iterator it = myList.begin();
for(int i=0; i<8; i++)
it++;
myList.insert(it, 100);
//迭代访问
for (int i : myList)
cout << i << endl;
}
map
map的底层通过红黑树来实现
#include <iostream>
#include <string>
#include <map>
using namespace std;
int main () {
map<string,int> mymap = {
{ "a", 10 },
{ "b", 0 },
{ "c", 0 } };
//插入元素
mymap.insert (pair<string,int>("d",100));
cout << mymap.at("d") << endl;
//查找元素并删除
map<string,int>::iterator it = mymap.find("c");
if (it != mymap.end())
mymap.erase (it);
//删除元素
mymap.erase ("b");
return 0;
}
c++之旅:模板库中的容器的更多相关文章
- 8、泛型程序设计与c++标准模板库2、c++标准模板库中的容器
顺序容器类以逻辑线性排列方式存储元素,在这些容器类型中的元素在逻辑上被认为是连续的存储空间中存储的.顺序容器可用于存储线性群体. 在关联容器类中,元素的存储和检索基于关键字和元素与其他元素之间的关系, ...
- ATL模板库中的OLEDB与ADO
上次将OLEDB的所有内容基本上都说完了,从之前的示例上来看OLEDB中有许多变量的定义,什么结果集对象.session对象.命令对象,还有各种缓冲等等,总体上来说直接使用OLEDB写程序很麻烦,用很 ...
- cb23a_c++_标准模板库STL_set_multiset_关联容器
cb23a_c++_标准模板库STL_set_multiset_关联容器 set(集)数据不能重复.multiset(多集)可以重复.操作数据速度快,数据自动排序.红黑树(数据结构)红黑树-二叉树基本 ...
- STL(标准模板库)理论基础,容器,迭代器,算法
基本概念 STL(Standard Template Library,标准模板库)是惠普实验室开发的一系列软件的统称.现然主要出现在C++中,但在被引入C++之前该技术就已经存在了很长的一段时间. ...
- 8、泛型程序设计与c++标准模板库2.5容器适配器
容器适配器是用来扩展7中基本容器的,是修改和调整其他类接口的类.他们不提供存放数据的实际数据结构的实现方法,而且容器适配器也不支持迭代器. 1.标准栈容器 使用STL中的标准栈为程序员提供了一层附加的 ...
- 《深入实践C++模板编程》之六——标准库中的容器
1.容器的基本要求 a.并非所有的数据都可以放进容器当中.各种容器模板对所存数据类型都有一个基本要求——可复制构造.将数据放进容器的过程就是通过数据的复制构造函数在容器内创建数据的一个副本的过程. b ...
- C++STL 库中set容器应用
#include<iostream> #include<cstdio> #include<set> using namespace std; set<int& ...
- C++STL库中vector容器常用应用
#include<iostream> #include<vector> #include<algorithm> using namespace std; int m ...
- 标准模板库中的队列(queue)
//C++数据结构与算法(第4版) Adam Drozdek 著 徐丹 吴伟敏<<清华大学出版社>> 队列容器默认由deque实现,用户也可以选择list容器来实现.如果用 ...
随机推荐
- Docker 如何把镜像上传到docker hub
1 首先你得准备一个hub 的帐号, 去 https://hub.docker.com 注册吧! 2 在hub那里新建一个仓库, 这个就类似于github那边的..create ---> cre ...
- string类(三、string.format格式字符串)
参考连接: http://www.cnblogs.com/luluping/archive/2009/04/30/1446665.html http://blog.csdn.net/samsone/a ...
- [转]ASP.NET MVC 5 - 视图
在本节中,你要去修改HelloWorldController类,使用视图模板文件,在干净利索地封装的过程中:客户端浏览器生成HTML. 您将创建一个视图模板文件,其中使用了ASP.NET MVC 3所 ...
- 2D绘图引擎比较
这个问题很普遍.最近在研究这个问题,在网上搜了一些资料,再结合自己的经验,谈谈自己的一些想法. 一.双缓存能提高绘图效率吗? 网上有篇文章:绘图效率完整解决方案——三种手段提高GDI/GDI+绘图效率 ...
- [SCOI2010]序列操作[分块or线段树]
#include<cstdio> #include<iostream> #define lc k<<1 #define rc k<<1|1 using ...
- QQ空间的文艺打开方法
QQ空间被限制?打不开? 看看这里 第一种:http://user.qzone.qq.com/627911903 第二种:http://627911903.qzone.qq.com 第三种:http: ...
- Sass (Syntactically Awesome StyleSheets)
官网:https://www.sass.hk/docs/ Sass 是一款强化 CSS 的辅助工具,它在 CSS 语法的基础上增加了变量 (variables).嵌套 (nested rules).混 ...
- wordcount(C语言)
写在前面 上传的作业代码与测试代码放在GitHub上了 https://github.com/IHHHH/gitforwork 本次作业用的是C语言来完成,因为个人能力与时间关系,只完成了基本功能,扩 ...
- Junit 3.8.1 源码分析之两个接口
1. Junit源码文件说明 runner framework:整体框架; extensions:可以对程序进行扩展; textui:JUnit运行时的入口程序以及程序结果的呈现方式; awtui:J ...
- oracle编程艺术--runstst工具
runstats工具是< oracle database 9i/10g/11g编程艺术 深入数据库体系结构>作者写的一个统计性能工具,能对做同一件事的两个方法进行比较,得到孰优孰劣的结果. ...