目 录
一、vector的常见用法
vector是一种可变长数组,常用于使用vector通过邻接表存储图;它本身也可以当作数组使用,在一些元素不确定的时候可以很好的节省空间。
vector<vector<int> > a;
a.resize(m);//行数为m
for(int i=0;i<m;i++)//每行列数为n
a[i].resize(n);
//之后可采用遍历的方式为a数组赋值
int t;
for(int i=0;i<m;i++)
{
for(int j=0;j<n;j++)
a[i][j]=t;
}
/*也可以这样*/
vector<int> a[100];//可以理解为100行,行中的元素自己push_back();
a[i].push_back(x);
- vector的定义:vector<typename> name || ex. vector<int> name。二维数组表示
- vector内元素的访问:(1) 通过下标访问,ex. vi[index];(2) 使用迭代器访问
/* 迭代器的定义:vector<int>::iterator it 迭代器迭代数组开始标志:it.begin()+i 其效果和vi[i]一致 迭代器迭代数组结束标志:it.end() 其指的是数组最后一个元素后面的那个,不存在任何元素 begin()和end()是左闭右开的思考来做的 一般来说使用迭代器做循环是 for(vector<int>::iterator it=vi.begin();it!=vi.end;i++) printf("%d",*(it+i)) 只有vector和string容器可以这么做,其他只能用*it(在循环条件中it++) */ -
push_back()函数:
/* 使用方式: vi.push_back(x); 把x的值放在vector类型数组vi数组最后面 */ -
pop.back()函数:
/* 使用方式: vi.pop_back(x); 可以删除vector的尾元素x */ -
size()函数:
/* 使用方式: vi.size(); 获得vector中元素的个数 */ -
clear()函数:
/* 使用方法: vi.clear(); 将vi数组清空 */ -
insert()函数:
/* 使用方法: vi.insert(it,x); 例如: vi.insert(vi.begin()+2,-1); 把-1插到vector数组的第2个位置,其后面所有数字后移一位 */ -
erase()函数:
/* 两种使用办法 (1)vi.erase(it); 删除单个元素,例如vi.erase(it.begin()+3);删除vi中第4个元素,同时后面的元素向前移动一位。 (2)vi.erase(vi.begin()+1,vi.begin()+4); 删除选定区间中的所有元素,ex.中为删除vi[1],vi[2],vi[3],左闭右开思想。后面的元素向前移3位 */
二、set的常见用法
set是一种内部自动升序排列且不含重复元素的容器,也就是一个有序的集合。适用于要求去重且不方便开数组的情况。
- set的定义:set<typename> name
- set内元素的访问:
/* 和vector一样的是,set容器的迭代定义依旧是set<typename>::iterator it 不同的是:不能使用*(it+i)了 */ for(set<int>::iterator it=st.begin();it!=st.end();it++) printf("%d",*it); - insert()函数:
st.insert(x);//将x插入st中 - find()函数:
set<int>::iterator it=st.find(x) //在st中寻找一个x元素 - erase()函数:
/* 删除单个元素的形式 1 st.erase(x); //删除元素x 2 st.erase(st.find(x)) //删除元素x 删除一个区间的所有元素 1 st.erase(first,last) 2 st.erase(it,st.end()); */ - size()函数:
st.size();//得到st的元素个数 - clear()函数:
st.clear();//清除set所有元素
三、string的常见用法
string用来存储字符串,存储的字符串也可以通过c_str()函数转化为字符数组,如
string str="abcd";
printf("%s\n",str.c_str());
/*否则需要cin,cout输入输出,二者都在#include <iostream>中*/
同时#include <string>和#include <string.h>是不一样的,前者是STL的容器,后者则是C语言的头文件。
- string的定义:
/*定义*/ string str; /*初始化定义*/ string str="abcd"; - string中内容的访问:
/*访问方式*/ /*下标访问法,同字符数组类似*/ printf("%c",str[i]); /*迭代器访问法,格式与set,vector等不同,不需要typename,因为string只有字符型*/ string::iterator it; for(string::iterator it=str.begin();it!=str.end();it++){ printf("%c",*it); } - string类型字符串的拼接和比较:
/*字符串拼接*/ string str1="abc",str2="def",str3; str3=str1+str2; /*字符串的比较*/ if(str1 < str2) ... if(str1 != str2) ... if(str1 >= str2) ... - length()/size()函数:
/*返回string的长度*/ string str="abcxyz",str="opq"; printf("%d %d",str.length(),str.size()); - insert()函数:
/*insert()函数两种插入办法*/ /*str.insert(pos,string),pos表示插入的位置,string表示要插入的字符串*/ string str="abcdef",str2="opq"; str.insert(3,str2); /*得到abcopqdef*/ /*str.insert(it,it2,it3) it是欲插入的位置,it2,it3是待查字符串的首尾迭代器*/ str.insert(str.begin()+3,str2.begin(),str.end()) /*表示在str的第三个位置插入str2整个字符串*/ - erase()函数 :
/*erase()函数删除一个元素*/ str.erase(str.begin()+4); /*erase()函数删除一个区间的元素有两种方式*/ /*第一种:str.erase(first,last);*/ str.erase(str.begin()+2,str.end()-1); /*第二种:str.erase(pos,length);从pos开始删除length个元素*/ str.erase(3,2); - clear()函数:
/*清除字符串*/ str.clear(); - substr()函数:
/*substr(pos,length);返回从pos个字符及之后length-1个字符,即返回字符串*/ string str="helloworld"; str.substr(3,4); /*得到lowo的字符串*/ - string::npos:
/*表示-1或者4294967295,一般和str.find()联用,如果find(x)==string::npos,表示找到不到*/ - find()函数:
/*两种str.find()方式,返回第一次出现的位置*/ /*str.find(str)*/ if(str.find(str)!=string::npos) ... /*表示找到了,反之表示没找到*/ /*str.find(str,7)*/ if(str.find(str,7)!=string::npos) ... /*表示找到了,反之表示没找到*/ - replace()函数:
/*两种replace()方式*/ /*str.replace(pos,len,str2); 把str从pos号位开始,长度为len的字串替换为str2*/ /*str.replace(it,it2,str2); 把str从it号位开始到it2号位的前一位(左闭右开原则)替换为str2*/
四、map的常见用法
map是可以将任何基本类型映射到任何基本类型的容器。需要#include <map>头文件和using namespace std;如map<char,int> mp;(是将字符型映射为整型) map<string.int> mp(将字符串映射为整型),不使用map容器按数组的定义只能将int型映射为其他类型。
map的常见用途是:需要建立字符(或者字符串)与整数之间映射关系之间的题目,使用map可以减少代码量;判断打证书或者其他类型数据是否存在的时候,可一件map当做bool使用;字符串和字符串的映射也有可能遇到。
- map的定义:
/*map容器定义不同与其他容器,其容器定义如下*/ map<typename,typename> mp; /* 第一个typename表示key,第二个typename表示value,如 map<char,int> mp; */ - map容器内元素的访问:
/*map容器内元素的访问有两种方式*/ /*第一种是下标访问*/ mp['a']=1; printf("%d",mp['a']); /*第二种是使用迭代器访问*/ mp['m']=1; mp['n']=2; for(map<char,int>::iterator it=mp.begin();it!=mp.end();it++) printf("%c %d",it->first,it->second); /*在第二个例子中it->first指向key,it->second指向value,且map会以key的值从小到大的顺序自动排序,和set容器自动排序一样,采用红黑树实现*/ - find()函数:
/*find(key)返回值为key的映射的迭代器*/ mp.find('a'); - erase()函数:
/*erase()函数有两种使用方法,即删除单个元素(有两种办法,时间复杂度不同)和删除一个区间内所有元素*/ /*使用迭代器删除单个元素,时间复杂度为O(1)*/ map<char,int>::iterator it=mp.find('a'); mp.erase(it); /*使用key删除单个元素,时间复杂度为O(logN)*/ map.erase('a'); /*删除一个区间内所有元素,mp.erase(first,last);还是遵循左闭右开原则*/ map<char,int>::iterator it_first=mp.find('a'); map<char,int>::iterator it_last=mp.find('c'); mp.erase(it_first,it_last); - size()函数:
/*map容器内的映射对数*/ mp.size(); - clear()函数:
/*清除map容器中所有元素的函数*/ mp.clear();
本文详细介绍了C++标准模板库(STL)中的四种常用容器:vector、set、string和map的使用方法,包括定义、元素访问、插入、删除、查找等功能,适合初学者快速掌握STL容器的基本操作。
250

被折叠的 条评论
为什么被折叠?



