特点:变长数组
使用vector,需要添加vector头文件,并写上using namespace std; 其他容器类似,都需要添加相应的头文件,不再赘述。
vector name;
typename可以是任何基本类型,也可以是STL标准容器。注意,如果容器套容器,两个>之间应当加上空格,如下:
vector > name;
vector数组的定义方法:
vector arrayname[size];
与上一种写法不同的是,这种写法的一维长度已经固定。
迭代器类似于指针,定义方式如下:
vector::iterator it;
通过*it即可访问vector中的元素。
v[i]和 *(v.begin() + i)是等价的,需要注意的是,在常见STL容器中,只有vector和string支持v.begin()+3这种迭代器加上整数的写法。
另外,迭代器支持自加自减操作。
v.insert(it, x); //it是迭代器
//删除单个元素
v.erase(it); //it是迭代器
v.erase(v.begin() + 3)
//删除一个区间内元素
v.erase(v.begin() + 1, v.begin() + 3); //左闭右开区间
begin()和end()
不支持it < v.end()这种写法,应当写成it != v.end()
注意,v.end()指向尾元素地址的下一个地址。
vector本身没有find()
需要依靠algorithm头文件实现。
vector::iterator it = find(v.begin(), v.end(), 3);
特点:内部自动有序,且不含重复元素
与vector类似,略
只支持迭代器*it访问,不支持下标访问,也不支持 *(it + 3)。
insert(x)
自动排序和去重。
find()
s.find(value)返回值为value的迭代器。
erase()
//删除单个元素的两种方法:
s.erase(it); //it为迭代器,如s.erase(s.find(2));
s.erase(value);
//删除一个区间内的元素
s.erase(first,last); //first和end为迭代器
可以用cin,cout,getline等输入输出。若想使用printf,可以先用c_str()转化为字符串:
printf("%s", str.c_str());
若想使用scanf可以采用如下写法:
string str;
str.resize(100);
scanf("%s",&str[0]);
string str = "abcd";
str.insert(pos, string); //在pos位置插入字符串string
str.insert(it, it2, it3); //it为原字符串欲插入位置,it2和it3位待插字符串的首尾迭代器(左闭右开)
//删除单个元素
str.erase(it);
//一个区间
str.erase(first, last);
str.erase(pos,length); //如str.erase(3, 2);
str.find(str2); //当str2是子串时,返回第一次出现的pos,否则返回string::npos
str.find(str2, pos); //从pos位开始匹配str2
str.replace(pos, len, str2); //从pos开始长度为len的子串替换为str2
str.replace(it1, it2, str2); // [it1, it2)范围内的子串替换为str2
如果是字符串到整型的映射,必须使用string而不能使用char数组。
map的键和值也可以是STL容器。
map mp;
下标
map中的键是唯一的,mp[‘c’]可访问c对应的值。
迭代器
map可使用it->firsrt来访问键,it->second访问值。
map会以键从小到大的顺序自动排序。
//删除单个元素
mp.erase(it);
mp.erase(key);
//一个区间
mp.erase(first, last);
queue q;
只能通过front()访问队首元素,通过back()访问队尾元素。
只能通过top()访问栈顶元素。
pair可以看作一个包含两个元素的结构体。
需要添加头文件utility,因为map的内部实现涉及pair,因此只添加map也可以。
pair p;
//可通过以下写法初始化
pair p("haha",5);
//临时创建一个pair
pair("haha",5);
make_pair("haha",5);
类似于结构体的访问“.”,pair中有两个元素,分别是first和second。
pair p;
p.first = "haha";
p.second = 5;
p = make_pair("haha",5);
p = pair("haha",5);
mp.insert(make_pair("haha", 5));
mp.insert(pair("haha", 5));