vector (向量)
添加头文件
#include<vector>
using namespace std;
定义
vector<typename> name;
vector<typename> name[100];
vector<vector<typename> > name;
迭代器
vector<typename>::iterator it;
添加元素
//依次在vi末尾添加1,2,3,4,5
for(int i=1;i<=5;i++){
vi.push_back(i);
}
访问元素
for(int i=0;i<vi.size();i++){
printf("%d ",vi[i]);
}
//常用STL容器中,只有vector和string中允许使用迭代器加上整数的写法
it=vi.begin();
for(int i=0;i<vi.size();i++){
printf("%d ",*(it+i));
}
//end()是取尾元素的下一个地址,作为迭代器末尾标志,不储存任何元素
for(vector<int>::iterator it=vi.begin();it!=vi.end();vi++){
printf("%d ",*it);
}
1 2 3 4 5
插入元素
vi.insert(vi.begin()+2,-1);
1 2 -1 3 4 5
删除元素
//删除vector的尾元素
vi.pop_back();
1 2 -1 3 4
//erase(it)即删除迭代器为it处的元素
vi.erase(vi.begin()+2);
1 2 3 4
//erase(first,last)即删除[first,last)内的所有元素
vi.erase(vi.begin()+1,vi.end()-1);
1 4
清空元素
vi.clear();
set (集合)
头文件
#include<set>
using namespace std;
定义
set<typename> name;
set<set<typename> > name;
set<typename> name[100];
迭代器
set<int>::iterator it;
插入元素
//自动递增排序,且自动去除重复元素
st.insert(3);
st.insert(5);
st.insert(2);
st.insert(3);
访问元素
for(set<int>::iterator it=st.begin();it!=st.end();it++){
printf("%d ",*it);
}
2 3 5
查找元素
//find(value)返回set中对应值为value的迭代器
it=st.find(2);
printf("%d",*it);
2
删除元素
//erase(it),it 为所需删除元素的迭代器
st.erase(st.find(3));
2 5
//erase(value),value为所需删除元素的值
//初始元素 2 3 5
st.erase(3);
2 5
//erase(first,last)即删除[first,last)内的所有元素
//初始元素 2 3 5
st.erase(st.begin(),st.end());
清空元素
st.clear();
string(字符串)
头文件
#include<iostream>
#include<string>
using namespace std;
定义
string str="abcd";
string::iterator it;//string不像其他STL容器那样需要参数
访问元素
for(int i=0;i<str.length();i++){
printf("%c",str[i]);
}
abcd
//读入和输出整个字符串,只能用cin和cout
//cin和cout都在iostream头文件中,而不是stdio.h
string str;
cin>>str;
cout<<str<<endl;
abcd
abcd
//用c_str()将string类型转换为字符数组进行输出
string str="abcd";
printf("%s\n",str.c_str());
abcd
string str="abcd";
for(string::iterator it=str.begin();it!=str.end();it++){ //string同vector一样支持直接对迭代器进行加减某个数字
printf("%c",*it);
}
abcd
常用函数
//拼接
string str1="abc",str2="xyz",str3;
str3=str1+str2;
str1+=str2;
cout<<str1<<endl;
cout<<str3<<endl;
abcxyz
abcxyz
//比较 规则为字典序
string str1="aa",str2="aaa",str3="abc",str4="xyz";
if(str1<str2)
printf("aa<aaa\n");
if(str1!=str3)
printf("aa!=abc\n");
if(str4>=str3)
printf("xyz>=abc\n");
aa<aaa
aa!=abc
xyz>=abc
//返回长度
string str="abcxyz";
printf("%d %d",str.length(),str.size());
6 6
插入元素
//insert(pos,string) 在pos号位置插入字符串string
string str1="abcxyz",str2="opq";
str1.insert(3,str2);
cout<<str1<<endl;
abcopqxyz
//insert(it,it1,it2) it为原字符串的欲插入位置 it1和it2为待插字符串的首尾迭代器 表示串[it1,it2)将被插在it的位置上
string str1="abcxyz",str2="opq";
str1.insert(str1.begin()+3,str2.begin(),str2.end());
cout<<str1<<endl;
abcopqxyz
删除元素
//erase(it) 删除单个元素 it为需删除元素的迭代器
string str="abcxyz";
str.erase(str.begin()+3);
cout<<str<<endl;
abcyz
//erase(first,last) 删除[first,last)
string str="abcxyz";
str.erase(str.begin()+2,str.end()-1);
cout<<str<<endl;
abz
//erase(pos,length) pos为删除的起始位置,length为删除的字符个数
string str="abcxyz";
str.erase(2,3);
cout<<str<<endl;
abz
返回子串
//substr(pos,length) 为返回从pos位开始长度为length的子串
string str="Thank you for your smile.";
cout<<str.substr(6,3)<<endl;
you
查找
string str="Thank you for your smile.";
string str1="you",str2="me";
//str.find(str1) str1为str的子串时,返回其在str中第一次出现的位置 ,若不是,返回string::npos
if(str.find(str1)!=string::npos){ //string::npos是unsigned_int类型常数,值为-1,作为find函数失配的返回值
cout<<str.find(str1)<<endl;
}
if(str.find(str2)!=string::npos){
cout<<str.find(str2)<<endl;
}
else
cout<<"I know there is no position for me."<<endl;
//find(str1,pos) 为从str的pos位开始匹配str1
if(str.find(str1,7)!=string::npos){
cout<<str.find(str1,7)<<endl;
}
6
I know there is no position for me.
14
替换
string str="Maybe you will turn around.";
string str1="will not",str2="surely";
//replace(pos,length,str1)将str从pos开始长度为length的子串替换为str1
cout<<str.replace(10,4,str1)<<endl;
//replace(it1,it2,str2)将str迭代器[it1,it2)之间子串替换为str2
cout<<str.replace(str.begin(),str.begin()+5,str2)<<endl;
Maybe you will not turn around.
surely you will not turn around.