1.容器的类别
容器分为顺序容器和关联容器。而关联容器里面分为有序和无序的。如图一所示。
图一 容器的类别
1.1 顺序容器
顺序容器提供了快速方便访问元素的能力,因为元素访问顺序不依赖元素的值,而是其在容器的位置。
Array:固定大小数组。支持快速随机访问。不能添加或删除元素。
Vector:可变大小数组。支持快速随机访问,在尾部之外的位置插入和删除位置可能很慢。(需要移动插入/删除位置之后的所有元素)
Deque:双端队列。支持快速随机访问。在头尾位置插入/删除操作速度都很快。
List:双向链表。只支持双向顺序访问。在list中任意位置插入/删除操作速度都很快。
Forward-List:单向链表。只支持单向顺序访问。在链表任何位置进行插入/删除操作都很快。
tips:
①通常,使用vector是最好的选择。
②如果不确定应该使用哪种容器,那么可以在程序中只使用vector和list公共的操作:使用迭代器,不使用下标操作,避免随机访问。这样,在必要时选择使用vector或list都很方便。
1.2关联容器
关联容器支持高效的关键字查找和访问
1.2.1 有序关联容器
Set:关键字的简单集合。比如定义一个名为checks的set来保存那些是否来贷款的人的名字。在接受一个新的业务,可以直接通过check来检查顾客是否在里面。
Map:又称关联数组,是关键字-值的集合。比如人名作为关键字,电话号码作为值。
1.2.2 无序关联容器
Unordered_Set:用哈希函数组织的set。
Unordered_Map:用哈希函数组织的map。
2.向量(vector)
2.1 头文件using声明
要想使用vector,必须包含头文件以及using声明。
#include<vector>
using std::vector;
2.2 vector、string、Array
#include<iostream>
#include<vector>
using namespace std;
int main()
{
vector<int> v{1,2,3,4,5 };//定义及初始化
cout << "元素的个数: " << v.size()<<endl;//vector无length
cout << "第一个元素是: " << v[0] << endl;
for (auto i : v) //自动推导i值
{
cout << i << " ";
cout<< endl;
}
}
元素的个数: 5
第一个元素是: 1
1 2 3 4 5
vector下标是从0开始,size是元素个数,或者叫长度。
vector中无length()
string中有size()和length()
#include<iostream>
#include<string>
using namespace std;
int main()
{
string s = "hello";
cout << "字符的个数: " << s.size() << endl;
cout << "序列的长度: " << s.length() << endl; //含义不一样,但是返回的值一样
cout << "第一个字符是 " << s[0] << endl;
cout << " " << s << endl;
}
字符的个数: 5
序列的长度: 5
第一个字符是 h
hello
字符串下标也是从0开始的
2.3 vector常见接口
资料来自网络和书本,本人只是梳理总结。