1.vector(不定长数组):要使用vector需包含头文件 #include <vector>
1.1 简单介绍:
vector是C++标准模板库中的部分内容,它是一个多功能的,能够操作多种数据结构和算法的模板类和函数库。vector之所以被认为是一个容器,是因为它能够像容器一样存放各种类型的对象.
一个vector类似于一个动态的一维数组。像数组一样它也是从0开始的下标表示元素位置。
vector中可以存在重复的元素。
1.2声明:
vector的声明模板: vector<typename> name; //声明一个元素为typename类型的vector a
例如: vector<int> a; //声明一个元素为int类型的vector a
vector<string> b; //声明一个元素为string类型的vector b
PS:这里声明的vector a,b包含0个元素,但它是动态的,其大小会随着元素的插入和删除而增加或减少。
vector<int>a(10); //声明一个初始大小为10的int型vector a
vector<int>a(100,0); //这里声明的是一个已经存放了100个0的整型vector,其大小也随着元素的插入和删除而增加或减少。
1.3常用的函数:
假设:vector<int>a;
则: 未特别声明则括号里为空
a.size(); //返回vector的大小,即其包含元素的个数a.clear(); //将vector清空,vector大小变为0
a.push_back(); // 括号里为被添加元素 在vector末尾添加元素,vector的大小相应加一
a.pop_back(); //删除vector末尾的元素,vector的大小相应减一
a.back(); //返回vector末尾的元素
a.at(); // 括号里为位置 返回指定位置的元素
a.empty(); //判断vector是否为空,为空时返回true
a.front(); //返回vector的第一个元素
a.erase(); // 删除指定元素
a.max_size(); //返回最大可允许的vector元素数量值
a.capacity(); //当前vector所分配空间的大小
a.begin(); //返回向量头指针,指向第一个元素
a.end(); //返回向量尾指针,指向最后一个元素的下一个位置
a.rbegin(); //将vector反转后的开始指针返回(其实就是原来的end-1)
a.rend(); //将vector反转后的结束指针返回(其实就是原来的begin-1)
swap(); //与来一个vector交换数据
//通常有 for( it = a.begin() ; it!=a.end ; it++)
2.map(映射):要使用map需包含头文件 #include <map>
1.1 简单介绍:
map是STL的一个关联容器,它提供一对一(其中第一个可以称为关键字,每个关键字只能在map中出现一次,第二个可能称为该关键字的值)的数据处理能力,由于这个特性,它完成有可能在我们处理一对一数据的时候,在编程上提供快速通道。
这里说下map内部数据的组织:map内部自建一颗红黑树(一种非严格意义上的平衡二叉树),这颗树具有对数据自动排序的功能,所以在map内部所有的数据都是有序的。
map就是从键(Key)到值(value)的映射。因为重载了[]运算符,map像是数组的“高级版”。
例如:可以用一个map<string,int>month_name; 来表示“月份帽子到月份编号”的映射。
然后用month_name["July"] =7这样的方式来赋值。
1.2声明:
map的声明模板为:map<typename1,typename2> name;
则赋值时:name["一个typename1型数据"] = 一个typename2型的数据 ;
1.3常用函数:
1.4数据的插入(3种):
假设:map <int, string> mapStudent;
1.4.1 用insert函数插入pair数据:
mapStudent.insert(pair<int,string>(1,"student_one"));
1.4.2 用insert函数插入value_type数据:
mapStudent.insert(map<int, string>::value_type(1,"student_one"));
1.4.3 用数组方式插入数据:
mapStudent[2]="student_two";
PS: 若是:map<string,int>m; string s;
插入就用m[s]=1;或m[s]++;之类。
以上三种方法,第一种和第二种在效果上是完全一样的用insert函数插入数据,在数据的插入上涉及到集合的唯一性这个概念,即当map中有这个关键字时,insert操作是插入数据不了的,但是用数组方式就不同了,它可以覆盖以前该关键字对应的值。