vector容器
理解
该容器是封装的一个动态大小的顺序容器,能够根据当前当前长度进行动态申请内存:也就是当添加元素时,若数组已满,则申请2倍大小的该内存;当删除时,若当前数组的实际长度小于或等于数组长度的一半,则释放数组一半的内存。
使用
首先需引入该库:
#include<vector>
然后是容器的几种声明方式:
#include<vector>
using namespace std;
int main(){
//一维数组的声明方式
vector<int> vec; //不指定容器大小
vector<char> vec;
vector<int> vec(10) //指定了容器的大小,最多包含10个元素,但没有给其赋值
vector<int> vec(10,1) //指定了容器的大小,最多包含10个元素,给元素初始赋值为1
vector<int> vec1(vec) //使用其他容器初始化,容器vec1和容器vec完全相同
vector<int> vec1(vec.begin(),vec.end()); //使用迭代器初始化,将其他容器的元素全部赋值自己
int arr[5] = {1,2,3,4,5};
vector<int> vec = (arr,arr + 4); //将数组给容器赋值
//二维数组的声明方式
vector<vector<int>> vec;
vector<vector<int>> vec(5,vector<int>(6)); //初始化为行为5.列为6的二维数组
vector<vector<char>> vec;
//容器内包含一个容器,相当于是将多个个容器数组使用一个容器进行存放
vector<vector<int>> vec;
// 例: {{1,2,8,6},{2,5,3},{8,6,9},{8,,8,7,5,5,6},{6,3}}
return 0;
}
下面是操作容器的使用方法:
vec.size(); //返回容器中元素的个数
vec.capacity(); //返回容器的容量
vec.push_back(); //末尾加入元素
vec.pop_back(); //末尾删除元素
vec.front(); //返回容器第一个元素
vec.back(); // 返回容器最后一个元素
vec.empty(); //容器是否为空,为空返回true
//迭代器的使用
vector<int>::iterator it;
for(it=vec.begin();it!=vec.end();it++)
cout<<*it<<endl; //打印容器内所有元素
vec.insert(it,5); //在指向元素之前插入元素5
vec.insert(it,6,5); //在指向元素之前插入6个相同的元素5
vec.insert(it,first,last); //在指向元素之前插入迭代器范围内的相同的元素
vec.erase(it); //删除迭代器it指向的元素
vec.erase(first,last); //删除迭代器first和last中的元素
vec.begin(); //返回容器指向第一个元素的指针
vec.end(); 返回容器指向最后一个元素的指针
stack容器
理解
该库就是实现栈的原理,并对其进行封装的一个容器,只能在栈顶进行操作,秉承先进先出的原则
使用
首先需要引入该库:
#include<stack>
然后是进行栈容器的声明:
由于是实现的链栈,因此无需指定大小
stack<int> sta;
stack<char> sta;
stack<pair<int,int>> sta; //该地方的pair类似于将两个数据合并一个再数据存储,也可以理解为一个类似map的一个容器的key和value
下面是对栈容器的操作:
sta.top(); //返回栈顶元素
sta.pop();
sta.push();
sta.empty();
sta.size();
map
理解
能够将需要保存的数据和一个关键词(key)进行一对一的关系进行存储,例如:(“1”,“黎明”)中的1为关键字,而“黎明”为关键字“1”对应的数据。
使用
引入该库:
#include<map>
map容器的创建:
map<int,string> m; //关键字类型为int,数据类型为string类型
对map容器的操作:
m.insert(pair<int,string>(0,"wodennn")); //使用insert进行插入数据
m.insert(std::map < int, std::string > ::value_type (2, "Tom")); //插入value_type类型数据
m[22] = "fuehfaf"; //使用数组的方式进行插入数据
m.begin();
m.end();
it = m.begin();
while(it != m.end()){
cout<<it->first<< : <<it->second<<endl; //first是关键字,second是数据
it++; //迭代器递增
}
m.rbegin();
m.rend(); //反向迭代器
it = m.find("1"); //查找到关键字并返回当前位置的迭代器,进行迭代器删除
if(it == m.end()){
//表示没找到该数据
}
m.erase(it);
m.erase("1"); //关键字进行删除,删除成功返回1
m.erase(m.begin(),m.end()); //使用迭代器进行删除迭代器范围内的元素
m.size();
unordered_map
无序map容器,存储的各个键值对不允许相同和被修改。
使用
#include<unordered_map>
using namespace std;
unordered_map<string,string> umap; //创建容器
unordered_map<string,string> umap1{{"key1","value1"}};//创建并初始化
begin()
end()
cbegin()
cend()
empty()
size()
max_size()
at(key) //返回容器中key对应的值
find(key) //查找以key为键的键值对
count(key) //查找以key键的键值对的个数
insert()//添加新的键值队
string容器
理解
使用
引入头文件:
#include<string>
字符串的创建:
string s1; //定义但未初始化,默认值为"",空字符串
string s2 = "11 2 5 3, 4"; //使用字符串进行初始化
string s3 = s2; //使用一个字符串对象进行初始化
string s4(5,'s'); //初始化由5个字符s组成的字符串
string的用法:
s.length(); //返回字符串的真实长度,C++string的末尾没有'\0'字符
s[1]; //使用数组的方式访问字符串对应的字符
s[1] = '4'; //修改字符串中的字符
s1 = s2 + s3; //进行字符串的拼接
s1.insert(5,s3); //在指定位置插入字符或字符串
s.push_back('4'); //在尾部插入字符
s.erase(2); //删除起始下标为2开始的所有字符
s.erase(2,5); //删除起始下标为2长度为5的字符串
s.substr(6,4); //截取起始下标为6长度为4的字符串
s.find(s1,5); //从起始下标为5开始查找s1字符串
s.replace(4,5,s1); //将起始下标为4开始的长度为5的字符串替换s1
tolower(s);
toupper(s); //转换为大写
sort(s.begin(),s.end()); //字符串排序
s.substr(2,5); //截取起始2长度为5的字符串
s.strtok(s,","); //分割字符串
s.append('p'); //在字符串末尾添加字符或字符串
s.begin();
s.end(); //迭代器 可以不指定类型,使用auto类型作为随机数据类型