vector
1.定义和初始化
vector<int> vec1; //默认初始化,vec1为空
vector<int> vec2(vec1); //使用vec1初始化vec2
vector<int> vec3(vec1.begin(), vec1.end());//使用vec1初始化vec2
vector<int> vec4(10); //10个值为0的元素
vector<int> vec5(10, 4); //10个值为4的元素
2.常用操作方法
vec1.push_back(100); //尾部添加元素
vec1.size(); //元素个数
vec1.empty(); //判断是否为空
vec1[0]; //取得第一个元素
vec1.insert(vec1.end(),5,3); //从vec1.back位置插入5个值为3的元素
vec1.pop_back(); //删除末尾元素
vec1.earse(vec1.begin(),vec1.begin()+2);//删除vec1[0]-vec1[2]之间的元素,不包括vec1[2]其他元素前移
vec1==vec2; //判断是否相等==、!=、>=、<=...
vector<int>::iterator it=vec1.begin(); //获取迭代器首地址
vector<int>::const_iterator c_it=vec1.begin(); //获取const类型迭代器
vec1.clear(); //清空元素
3.遍历
- 下标法
int len=vec1.size();
for(int i=0;i<len;i++){
cout<<vec1[i];
}
- 迭代器
auto it=vec1.begin();
for(;it!=vec1.end();it++){
cout<<*it;
}
按第二列排序
bool cmp(vector<int> a,vector<int> b){ //先按第二列排
if(a[1]!=b[1]) return a[1]>b[1];
if(a[0]!=b[0]) return a[0]>b[0];
if(a[2]!=b[2]) return a[2]>b[2];
}
vector<vector<int> > data;
...
sort(data.begin(),data.end(),cmp);
vector实现不同类型排列
struct point{
int x;
string str;
};
bool cmp(point a,point b){ //按string排列
if(a.str!=b.str) return a.str>b.str;
else
return a.x>b.x;
}
int main(){
vector<point> data;
point x={1,"23"};
point y={2,"12"};
point z={3,"20"};
data.push_back(x);
data.push_back(y);
data.push_back(z);
sort(data.begin(),data.end(),cmp);
for(int i=0;i<3;i++){
cout<<data[i].x<<" "<<data[i].str;
cout<<endl;
}
}
map
自动按key值排序
1.定义和初始化
map<int,string> map1;
map<int,map<int, string> > map2;
2.常用操作方法
map1[1]="zk"; //添加元素
map1.insert(map<int, string>::value_type(2, "Diyabi"));//插入元素
map1.insert(pair<int,string>(1,"Siqinsini"));
map1.insert(make_pair<int, string>(4, "V5"));
//插入元素
string str=map1[1]; //根据key取得value,key不能修改
map<int,string>::iterator it=map1.begin();//取得迭代器首地址
int key=it->first; //根据迭代器取得key
string str=it->second; //根据迭代器取得value
map1.erase(it); //删除迭代器数据
map1.erase(1); //根据key删除value
map1.size(); //元素个数
map1.empty(); //判断空
map1.clear(); //清空所有元素
//3.遍历
for (map<int, string>::iterator iter = map1.begin(); iter != map1.end(); iter++)
{
int keyk = iter->first;
string valuev = iter->second;
}
set
集合里没有重复的元素
set<int> eg;
eg.insert(1);
//遍历set,可以发现元素是有序的
set<int>::iterator set_iter = eg1.begin();
for (; set_iter != eg1.end(); set_iter++)
cout << *set_iter << " ";
//使用size()函数可以获得当前元素个数
eg1.size();
//find()函数可以查找元素是否存在
if (eg1.find(200) == eg1.end())
cout << "200 isn't in the set eg1" << endl;
//获得两个set的并
set<int> eg3;
cout << "Union(两个set的并集):";
set_union(eg1.begin(),
eg1.end(),
eg2.begin(),
eg2.end(),
insert_iterator<set<int> >(eg3, eg3.begin())
);//注意第五个参数的形式
copy(eg3.begin(), eg3.end(), ostream_iterator<int>(cout, " "));
cout << endl;
//获得两个set的交,注意进行集合操作之前接收结果的set要调用clear()函数清空一下
eg3.clear();
set_intersection(eg1.begin(), //头文件<algorithm>
eg1.end(),
eg2.begin(),
eg2.end(),
insert_iterator<set<int> >(eg3, eg3.begin())
);
cout << "Intersection:";
copy(eg3.begin(), eg3.end(), ostream_iterator<int>(cout, " "));头文件<iterator>
cout << endl;
//获得两个set的差
eg3.clear();
set_difference(eg1.begin(),
eg1.end(), eg2.begin(),
eg2.end(),
insert_iterator<set<int> >(eg3, eg3.begin())
);
cout << "Difference:";
copy(eg3.begin(), eg3.end(), ostream_iterator<int>(cout, " "));
cout << endl;
//获得两个set的对称差,也就是假设两个集合分别为A和B那么对称差为AUB-A∩B
eg3.clear();
set_symmetric_difference(eg1.begin(), eg1.end(), eg2.begin(), eg2.end(), insert_iterator<set<int> >(eg3, eg3.begin()));
copy(eg3.begin(), eg3.end(), ostream_iterator<int>(cout, " "));
cout << endl;
return 0;
}
queue
queue<int> q1;
queue<double> q2;
queue 的基本操作有:
入队,如例:q.push(x); 将x 接到队列的末端。
出队,如例:q.pop(); 弹出队列的第一个元素,注意,并不会返回被弹出元素的值。
访问队首元素,如例:q.front(),即最早被压入队列的元素。
访问队尾元素,如例:q.back(),即最后被压入队列的元素。
判断队列空,如例:q.empty(),当队列空时,返回true。
访问队列中的元素个数,如例:q.size()
char[]
char st[100];
字符串长度
strlen(st);字符串比较
strcmp(st1,st2);
strncmp(st1,st2,n); 把st1,st2的前n个进行比较。附加
strcat(st1,st2);
strncat(st1,st2,n); n表示连接上st2的前n个给st1,在最后不要加’\0’。替换
strcpy(st1,st2);
strncpy(st1,st2,n); n表示复制st2的前n个给st1,在最后要加’\0’。查找
where = strchr(st,ch) ch为要找的字符。
where = strspn(st1,st2); 查找字符串。
where = strstr(st1,st2);string
string str;
字符串长度
len = str.length();
len = str.size();字符串比较
可以直接比较
也可以:
str1.compare(str2);
str1.compare(pos1,len1,str2,pos2,len2); 值为负,0 ,正。
nops 长度到完。附加
str1 += str2;
或
str1.append(str2);
str1.append(str2.pos2,len2);字符串提取
str2 = str1.substr();
str2 = str1.substr(pos1);
str2 = str1.substr(pos1,len1);
string a=s.substr(0,4); //获得字符串s中 从第0位开始的长度为4的字符串字符串搜索
where = str1.find(str2);
where = str1.find(str2,pos1); pos1是从str1的第几位开始。
where = str1.rfind(str2); 从后往前搜。插入字符串
不是赋值语句。
str1.insert(pos1,str2);
str1.insert(pos1,str2,pos2,len2);
str1.insert(pos1,numchar,char); numchar是插入次数,char是要插入的字符。替换字符串
str1.replace(pos1,str2);
str1.replace(pos1,str2,pos2,len2);删除字符串
str.erase(pos,len)
str.clear();交换字符串
swap(str1,str2);C –> C++
char *cstr = “Hello”;
string str1;
cstr = cstr;
string str2(cstr);