1.vector
变长数组
头文件:#include<vector>
using namespace std;
1.1定义:
vector<typename> name; vector<int> name; vector<double> name; vector<node> name;//node是结构体类型 //如果typename也是一个STL容器,定义的时候>>符号之间要加上空格 即: vector<vector<int> > name; vector<vector<int> > name; //vector数组定义: vector<typename> arrayname[size]; //arrayname[0]--arrayname[size-1]都是一个vector容器 //与vector<vector<typename> > name 不同的是,vector数组写法一维长度已经固定,另一维变化
1.2访问元素:
/* 两种访问方式: */ // 1.通过下标访问 vector<typename> vi; //直接访问 vi[index] 即可 //2.通过迭代器访问: vector<typename>::iterator it; //通过 *it访问vector里的元素 vector<int> vi; vector<int>::iterator it=vi.begin(); printf ( " % d n " , *( it+1) ); //另一种写法 for( vector<int>::iterator it=vi.begin();it!=vi.end();it++){ printf("%d",*it) } // begin()函数的作用是取vi的首元素地址,end()函数取尾元素地址的下一个地址 //只有vector和string中,才允许使用vi.begin()+n这中迭代器加证书的写法
1.3 常用函数:
// push_back() ---------push_back(x)在vector后面添加一个元素x for(int i=1;i<=3;i++){ vi.push_back(i); } // pop_back() ------------删除vector的尾元素 // size() ---------------获得vector元素的个数 printf("%d ",vi.size()); // clear() ----------------清空vector中的所有元素 // insert() ---------------- insert ( it , x ) 向vector的任意迭代器it处插入一个元素x vi.insert(vi.begin+2,-1); // erase() ---------------删除单个元素或者删除一个区间内所有元素 vi.erase(it)// 删除迭代器为it处的元素 vi.erase(vi.begin()+3) vi.erase(first,last) //删除【first,last)内所有元素 vi.erase(vi.begin()+1,vi.begin()+4);//删除 vi[1] vi[2] vi[3]
2.set 集合
内部自动有序 不含重复元素
头文件:#include using namespace std;
2.1 set的定义:
set<typename> name; //同样,如果typename是STL容器,定义时在>>之间加空格
2.2 set内元素的访问—只能通过迭代器访问
set<int>::iterator it; //通过*it来访问set元素 for(set<int>::iterator it=st.begin();it!=st.end();it++){ printf("%d",*it) //不能通过*(it+n)这种方法访问元素 }
2.3 set 常用函数
// insert() ------insert(x) 将x插入set中,自动排序去重 // find() -------find(value) 返回set中对应值为value的迭代器 set<int> st; for(int i=1;i<4;i++){ st.insert(i); } set<int>::iterator it=st.find(2);//在set中查找2,并返回其迭代器 printf("%d",*it); 或者 printf("%d",*(st.find(2))); // erase() ---------- 删除单个元素 或者删除一个区间内所有元素 //1.删除单个元素 两种方法:st.erase(it) -it为删除元素的迭代器 st.erase(value) -value删除元素的值 st.erase(st.find(3));//结合find使用 st.erase(100);//100为set内元素的值 //2.删除一个区间内的所有元素 st.erase(first,last) --first为删除区间起始迭代器,last为删除区间末尾迭代器的下一个地址 st.erase(st.find(1),st.end()); // size() - ------获得set内元素个数 // clear() --------清空set中的元素
3 string
头文件:#include using namespace std;
3.1 string 的定义
string str; string str="abcd";
3.2 string的访问
// 1.通过下标访问 string str="abcd"; for(int i=0;i<str.length();i++){ printf("%c",str[i]); } //用c_str()将string转为字符数组 // 2.通过迭代器输出 string::iterator it; for(string::iterator it=str.begin();it!=end();it++){ printf("%c",*it); } // 只有string 和 vector 支持 str.begin()+n 迭代器加数字这种写法
3.3string 常用函数
// 两个string拼接 string str1="abc",str2="def"; string str3; str3=str1+str2; cout<<str3; // 两个string直接用 == != < <= > >=比较大小-----按照字典序 // length() / size() --返回string的长度 // insert() 1. insert(pos,string) ---在pos位置插入字符串string str.insert(3,"ancsd"); 2.insert(it,it2,it3)------it为原字符串的欲插入位置,it2 和it3为待插入字符串的首尾迭代器,用来表示串【it2,it3)将被插在it位置上 str.insert(str.begin()+3,str2.begin(),str2.end()); // erase() 1.删除单个元素 erase(it) ---删除单个元素 it为需要删除元素的迭代器 str.erase(str.begin()+4); 2.删除一个区间内元素 erase(first,last) --删除【first,last) first last均为迭代器 str.erase(str.begin()+2,str.end()); erase(pos,length)--pos为开始删除的起始位置,length为删除的字符个数 str.erase(3,2) ----删除3号位开始的2个字符 // clear() 清空string中的数据 // substr() ----------substr(pos,len) 返回从pos号位开始,长度为len的子字符串 str.substr(0,4); // find() ----- 1. str.find(str2) 当str2是str的子串时,返回其在str中第一次出现的位置,如果不是,返回string::npos 2. str.find(str2,pos) 从str的pos位置开始匹配str2,返回值与上面相同 // replace() 1. replace(pos,len,str2) ----吧str从pos号位置开始,长度为len的子串替换为str2 2. replace(it1,it2,str2)------把str的迭代器【it1,it2)范围的子串替换为str2
4.map
映射 ,可以将任何基本类型映射到任何基本类型
头文件:#include
4.1 map的定义
map<typename1,typename2> mp; //第一个是键的类型,第二个是值的类型 map<string,int> mp; //如果是字符串到整形的映射,必须使用string不能用char数组 //也可以是STL容器 map<set<int>,string> mp;
4.2 map内元素的访问
// 1.通过下标访问 map中的键是唯一的 map<char,int> mp; mp['c']=20; mp['d']=30; printf("%d",mp['c']); // 2.通过迭代器访问 map<typename1,typename2>::iterator it; 通过 it->frist 来访问键, 使用 it->second 访问值 mp['c']=20; mp['d']=30; for(map<char,int>::iterator it=mp.begin();it!=mp.end();it++){ printf("%c %d ",it->first,it->second); }
4.3 map常用函数
// find() ------find(key)返回键为key的映射的迭代器 mp['c']=20; mp['d']=30; map<char,int>::iterator it=mp.find('b'); printf("%c %d",it->first,it->second); // erase() // 删除单个元素两种方法 1.erase(it)--it为需删除元素的迭代器 mp['c']=20; mp['d']=30; map<char,int>::iterator it=mp.find('b'); mp.erase(it); 2.erase(key) --key为欲删除的映射的键 mp['c']=20; mp['d']=30; mp.erase('c'); //删除一个区间内的 所有元素 mp.erase(first,last) fisrt为删除区间起始迭代器,last为删除区间末尾迭代器的下一个地址 mp['c']=20; mp['d']=30; mp.erase(it,mp.end()); // size() ---返回map中映射的对数 // clear() -----清空map中的元素
5.queue
队列,先进先出的容器
头文件:#include using namespace std;
5.1 queue的定义:
queue<typename> name;
5.2 queue容器内元素的访问
// queue 先进先出 只能通过front来访问队首元素,通过back来访问队尾元素 queue<int> q; for(int i=1;i<=5;i++){ q.push(i);//push(i)将i压入队列,依次入队的是1 2 3 4 5 } printf("%d %d",q.front(),q.back());
5.3 queue 常用函数
// push() ----push(x)将x进行入队 // front() back() 分别获得队首元素和队尾元素 // pop() ----令队首元素出队 queue<int> q; for(int i=1;i<=5;i++){ q.push(i);//push(i)将i压入队列,依次入队的是1 2 3 4 5 } for(int i=1;i<=3;i++){ q.pop() } // empty()---检测queue是否为空,返回true则空,返回false则非空 // size() ---返回queue内元素的个数
6.priority_queue
优先队列 底层用堆实现 队首元素一定是当前队列中优先级最高的一个
头文件:#include using namespace std;
6.1 priority_queue的定义
priority_queue<typename> name;
6.2 priority_queue 容器内元素的访问
优先队列没有front函数和back函数,只能通过top函数访问队首元素 q.push(3); q.push(4); printf("%d",q.top());
6.3priority_queue 常用函数
// push() ----push(x)将x入队 // top() ----获得队首元素 // pop() ------令队首元素出队 // empty() -----检测优先队列是否为空,空返回true,非空返回false