C++ STL
- string
- vector
- set
- unordered_set
- list
- map
string
string s1;//初始化字符串,空字符串
string s2 = s1; //拷贝初始化,深拷贝字符串
string s3 = "I am Yasuo"; //直接初始化,s3存了字符串
string s4(10, 'a'); //s4存的字符串是aaaaaaaaaa
string s5(s4); //拷贝初始化,深拷贝字符串
string s6("I am Ali"); //直接初始化
string s7 = string(6, 'c'); //拷贝初始化,cccccc
getline(is,s); //从is中读取一行赋值给s,返回is
s.empty(); //若s为空,返回true
s.size(); //返回s中字符个数
s.find("am",0); //返回子串位置,第二个参数表示从第几位开始搜索 若找不到 返回 string::npos
string str;
getline(cin, str); //返回输入的一整行内容
cout << str << endl;
iterator
在C++中,有迭代器iterator,常使用它来访问容器元素。
string str = " This is iterator";
string ::iterator it;
for( it = str.begin(); it != str.end(); it++){
cout<<*it<<endl;
}
//反向迭代(以vector为例)
vector<string>::reverse_iterator iter
for (iter = v.rbegin(); iter != v6.rend(); iter++)
{
cout << *iter << endl;
}
vector
#include <vector>
vector<type> v; //如果vector的元素类型是int,默认初始化为0;如果vector元素类型为string,则默认初始化为空字符串。
vector<type> v(v0); //v中包含所有v0元素的副本
vector<type> v(n); //v中包含n个重复地执行了值初始化的对象
vector<vector<int> >; //注意空格。这里相当于二维数组int a[n][n];
vector<int> v5 = { 1,2,3,4,5 }; //列表初始化,注意使用的是花括号
vector<vector<int> > newOne(row_num, vector<int>(col_num, 0));//二维初始化
vector<vector<int> > vec(m, vector<int>(n, 0));//初始化一个m行n列的元素值全为0的二维数组
v1.push_back(n); //向vector中添加元素
v.empty()
v.size()
v[n] //返回第n个元素 v1[i] = 100; 只能对已存在的元素进行赋值或者修改操作,如果是要加入新元素,需要使用push_back
v.pop_back(); //删除尾部对象
v.clear(); //删除所有元素
v.erase(); //删除一个或多个元素
v.front(); //访问第一个元素
v.back(); //访问最后一个元素
vector<int>::iterator it = find(vec.begin(), vec.end(), 6);
if (it != vec.end())
cout<<*it<<endl;
else
cout<<"can not find"<<endl;
//不同于map(map有find方法),vector本身是没有find这一方法,其find是依靠algorithm来实现的 find的返回值是一个迭代器(iterator),如果找到了会返回指向目标元素的迭代器,没找到会返回end()。
补充[博客](https://blog.youkuaiyun.com/xzymmd/article/details/83652726)
set
set里面的元素是有序的且唯一的,往set里添加元素会自动排序.
#include <set>
set<int> s;
s.insert(3) //向容器中添加新元素。
unordered_set
#include <unordered_set>
unordered_set 容器和 set 容器很像,唯一的区别就在于 set 容器会自行对存储的数据进行排序,而 unordered_set 容器不会。
- 容器内部存储的各个元素的值都互不相等,且不能被修改。
- 不会对内部存储的数据进行排序
list 双向列表 不能随机访问元素
list容器不能调用algorithm下的sort函数进行排序,因为sort函数要求容器必须可以随机存储,而list做不到。所以,list自己做了一个自己用的排序函数。
map
#include <map>
map<string, int> v;
v["Kobe"] = 100;
v["James"] = 99;
map<string, int>::iterator it;
for (it = v.begin(); it != v.end(); it++)
{
cout << it->first << " " << it->second << endl; //注意用法,不是用*it来访问了。first表示的是key,second存的是value
}
cout << endl;
可以通过count 来判断map 中是否存在某个key, 若v.count(“Lee”)返回为0,说明该key不存在
unordered_map
unordered_map<string, vector<string> > tmp;