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容器来实现.如果用 ...
随机推荐
- Hibernate_day03--课程安排_表之间关系_一对多操作
Hibernate_day03 上节内容 今天内容 表与表之间关系回顾(重点) Hibernate的一对多操作(重点) 一对多映射配置(重点) 一对多级联操作 一对多级联保存 一对多级联删除 一对多修 ...
- iOS开发之--png图片编译时报错 (Command /Applications/Xcode.app/Contents/Developer/usr/bin/copypng failed with exit code 1 )
编译或者运行APP的时候,老是报这个错误:Command /Applications/Xcode.app/Contents/Developer/usr/bin/copypng failed with ...
- 敏捷开发Scrum学习
官方:http://baike.baidu.com/link?url=VGFzdJpuHX3g90kIX6l1QABWMmBNyf30sTGuEcJ6OJVMq0Cot1G9Imbu1gls-xpI6 ...
- Mybatis整理系列(01)————传入参数方式以及#{}与${}的区别
一.在MyBatis的select.insert.update.delete这些元素中都提到了parameterType这个属性.MyBatis现在可以使用的parameterType有基本数据类型和 ...
- boost::archive::text_oarchive
Serialization的中文解释是“串行化” .“序列化”或者“持久化” ,就是将内存中的对象保存到磁盘中,等到程序再次运行的时候再读取磁盘中的文件恢复原来的对象.下面来看一个简单的例子: #in ...
- [LintCode] 寻找缺失的数
class Solution { public: /** * @param nums: a vector of integers * @return: an integer */ int findMi ...
- Date 日期格式化
<span id="time"></span> <script> //名称:日期加法函数 //参数:part(year.month.day.ho ...
- 160427、CSS3实战笔记--多列布局
通过阅读和学习书籍<CSS3实战>总结 <CSS3实战>/成林著.—北京机械工业出版社2011.5 多列布局适合纯文字版式设计,如报纸内和杂志类网页布局,不适合做网页结构布 ...
- 160329(一)、在web.xml文件里配置org.springframework.web.context.ContextLoaderListener
Java代码 <!-- 指明spring配置文件在何处 --> <context-param> <param-name>contextConfigLocation& ...
- UIScrollView 去掉下面的滚动条
[_scrollView setShowsHorizontalScrollIndicator:NO];