【笔记】C++刷题常用的容器及相关用法

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(101)     //指定了容器的大小,最多包含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类型作为随机数据类型
  • 8
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值