1
2
3
|
vector<
int
> vi;
list<
int
> li;
deque<
int
> di;
|
函数模板 | 意义 |
C c(n); |
1
2
3
4
5
6
7
8
9
10
|
//初始化为一个容器的副本
vector<
int
> vi;
vector<
int
> vi2(vi);
//利用vi来初始化vi2
//初始化为一段元素的副本
char
*words[] = {
"stately"
,
"plump"
,
"buck"
,
"mulligan"
};
size_twords_size =
sizeof
(words)/
sizeof
(
char
*);
list<string> words2(words, words + words_size);
//分配和初始化指定数目的元素
constlist<
int
>::size_type list_size = 64;
list<string> slist(list_size,
"a"
);
// 64 strings, each is a
|
表达式 | 意义 |
*iter | |
iter->mem | |
表达式 | 意义 |
函数名 | 意义 |
c.begin() | |
c.end() | 返回一个迭代器,它指向容器 c 的最后一个元素的下一位置 |
c.rbegin() | 返回一个逆序迭代器,它指向容器 c 的最后一个元素 |
c.rend() | 返回一个逆序迭代器,它指向容器 c 的第一个元素前面的位置 |
函数名 | 意义 |
c.push_back(t) | |
c.push_front(t) | |
c.insert(p,t) | |
c.insert(p,n,t) | |
c.insert(p,b,e) |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
//在容器首部或者尾部添加数据
list<
int
> ilist;
ilist.push_back(ix);
//尾部添加
ilist.push_front(ix);
//首部添加
//在容器中指定位置添加元素
list<string> lst;
list<string>::iterator iter = lst.begin();
while
(cin >> word)
iter = lst.insert(iter, word);
// 和push_front意义一样
//插入一段元素
list<string> slist;
string sarray[4] = {
"quasi"
,
"simba"
,
"frollo"
,
"scar"
};
slist.insert(slist.end(), 10,
"A"
);
//尾部前添加十个元素都是A
list<string>::iterator slist_iter = slist.begin();
slist.insert(slist_iter, sarray+2, sarray+4);
//指针范围添加
|
函数名 | 意义 |
c.size() | |
c.max_size() | |
c.empty() | |
c.resize(n) | |
c.resize(n,t) |
1
2
3
4
|
list<
int
> ilist(10, 1);
ilist.resize(15);
// 尾部添加五个元素,值都为0
ilist.resize(25, -1);
// 再在尾部添加十个元素,元素为-1
ilist.resize(5);
// 从尾部删除20个元素
|
函数名 | 意义 |
c.back() | |
c.front() | 返回容器 c 的第一个元素的引用。如果 c 为空,则该操作未定义 |
c[n] | |
c.at(n) |
1
2
3
4
5
6
|
int
vector<
int
> vi;
for
(
int
i=0;i<10;i++)vi.push_back(i);
cout<<vi[0]<<endl;
cout<<vi.at(0)<<endl;
cout<<vi[10]<<endl;
//越界错误
cout<<vi.at(10)<<endl;
//越界错误
|
函数名 | 意义 |
c.erase(p) | |
c.erase(b,e) | |
c.clear() | 删除容器c内的所有元素。返回void |
c.pop_back() | |
c.pop_front() |
1
2
3
4
5
6
7
8
9
10
|
//删除第一个或最后一个元素
list<
int
> li;
for
(
int
i=0;i<10;i++)list.push_back(i);
li.pop_front();
//删除第一个元素
li.pop_back();
//删除最后一个元素
//删除容器内的一个元素
list<
int
>::iterator iter =li.begin();
if
(iter!= li.end())li.erase(iter);
//删除容器内所有元素
li.clear();
|
函数名 | |
c1 = c2 | |
c1.swap(c2) | |
c.assign(b,e) | |
c.assign(n,t) | 将容器c重新设置为存储n个值为t的元素 |
1
2
3
4
|
list<string> sl1,sl2;
for
(
int
i=0;i<10;i++)sl2.push_back(
"a"
);
sl1.assign(sl2.begin(),sl2.end());
//用sl2的指针范围赋值,sl1中十个元素都为a
sl1.assign(10,
"A"
);
//s1被重新赋值,拥有十个元素,都为A
|
1
2
3
|
vector<string> vs1(3);
// vs1有3个元素
vector<string> vs(5);
// vs2有5个元素
vs1.swap(vs2);
//执行后,vs1中5个元素,而vs2则存3个元素。
|
1
2
3
4
5
6
|
vector<
int
> ivec;
cout <<
"ivec: size: "
<< ivec.size()
<<
" capacity: "
<< ivec.capacity() << endl;
//都为0
for
(vector<
int
>::size_type ix = 0; ix != 24; ++ix)ivec.push_back(ix);
cout <<
"ivec: size: "
<< ivec.size()
<<
" capacity: "
<< ivec.capacity() << endl;
//capacity大于size
|
1
2
|
//在之前一段代码的基础上
ivec.reserve(ivec.capacity()+50);
//为ivec增加了50的预留空间
|
名称 | 意义 |
size_type | |
value_type | 元素类型 |
container_type | 基础容器的类型,适配器在此容器类型上实现 |
A a; | 创建一个新空适配器,命名为 a |
A a(c); | 创建一个名为 a 的新适配器,初始化为容器 c 的副本 |
关系操作符 |
1
2
3
4
|
vector<
int
> vi;
deque<
int
> deq;
stack<
int
> stk(deq);
//用deq初始化stk
stack<
int
> stk1(vi);
//报错
|
函数名 | 意义 |
s.empty() | |
s.size() | 返回栈中元素的个数 |
s.pop() | 删除栈顶元素的值,但不返回其值 |
s.top() | 返回栈顶元素的值,但不删除该元素 |
s.push(item) | 在栈顶压入新元素 |
函数名 | 意义 |
q.empty() | |
q.size() | 返回队列中元素的个数 |
q.pop() | 删除队首元素,但不返回其值 |
q.front() | |
q.back() | |
q.top() | |
q.push(item) |
操作名 | 意义 |
p1 < p2 | |
p1 == p2 | |
p.first | 返回p中名为first的(公有)数据成员 |
p.second | 返回p的名为second的(公有)数据成员 |
1
|
pair<string, string> test(
"A"
,
"B"
);
|
1
2
3
4
5
6
7
8
|
//pairs对象的操作
string firstBook;
if
(author.first ==
"James"
&& author.second ==
"Joyce"
)firstBook =
"Stephen Hero"
;
//生成新的pair对象
pair<string, string> next_auth;
next_auth = make_pair(
"A"
,
"B"
);
//第一种方法
next_auth = pair<string, string>(
"A"
,
"B"
);
//第二种方法
cin>>next_auth.first>>next_auth.second;
//第三种方法
|
1
|
map<string,
int
> word_count;
|
函数名 | 意义 |
类型 | 意义 |
在 map 容器中,键所关联的值的类型 | |
函数名 | 意义 |
m.insert(e) | |
1
2
|
word_count.insert(map<string,
int
>::value_type(
"Anna"
, 1));
word_count.insert(make_pair(
"Anna"
, 1));
|
1
2
|
pair<map<string,
int
>::iterator,
bool
> ret =
word_count.insert(make_pair(word, 1));
|
函数名 | 意义 |
m.count(k) | |
m.find(k) | 如果m容器中存在按k索引的元素,则返回指向该元素的迭代器。如果不存在,则返回超出末端迭代器。 |
1
2
3
4
|
int
occurs = 0;
if
(word_count.count(
"foobar"
))occurs = word_count[
"foobar"
];
map<string,
int
>::iterator it = word_count.find(
"foobar"
);
if
(it != word_count.end())occurs = it->second;
|
函数名 | 意义 |
m.erase(k) | |
m.erase(p) | |
1
2
3
4
|
string removal_word =
"a"
;
if
(word_count.erase(removal_word))
cout <<
"ok: "
<< removal_word <<
" removed\n"
;
else
cout <<
"oops: "
<< removal_word <<
" not found!\n"
;
|
1
2
3
4
5
6
7
8
|
vector<
int
> ivec;
for
(vector<
int
>::size_type i = 0; i != 10; ++i) {
ivec.push_back(i);
ivec.push_back(i);
}
set<
int
> iset(ivec.begin(), ivec.end());
cout << ivec.size() << endl;
//20个
cout << iset.size() << endl;
// 10个
|
1
2
3
4
|
set<string> set1;
set1.insert(
"the"
);
//第一种方法:直接添加
set<
int
> iset2;
iset2.insert(ivec.begin(), ivec.end());
//第二中方法:通过指针迭代器
|
1
2
3
4
5
6
|
set<
int
> iset;
for
(
int
i = 0; i<10; i++)iset.insert(i);
iset.find(1)
// 返回指向元素内容为1的指针
iset.find(11)
// 返回指针iset.end()
iset.count(1)
// 存在,返回1
iset.count(11)
// 不存在,返回0
|
函数名 | 意义 |
m.lower_bound(k) | |
m.upper_bound(k) | 返回一个迭代器,指向键大于 k 的第一个元素 |
m.equal_range(k) | |