您的位置:首页 > 其它

标准模板库(STL)之 vector 列传 (二)

2016-02-24 10:31 281 查看
标准模板库(STL)之 vector 列传

两种搭配

vector 为空的判断

所能容纳的数据类型

push_back 一个新元素

resize 的两个重载

clear的含义

两个 vector 的相等性判断,
v1 == v2
对容器内的每一个元素,调用
==


1. 两种搭配

coll.reserve() ⇒ coll.push_back()

coll.reserve()只预留空间,不进行初始化,也即coll.reserve()完了之后容器的size()仍为0,

coll.resize() ⇒ coll[i]

std::vector<int> v;
v.resize(10);
// 没有这句话
// 或者使用 v.reserve(10)
// 编译器都会报错
for (size_t i = 0; i < 10; ++i)
v[i] = i;


2. vector 为空的判断

也即
coll.empty()
的内部实现:

bool empty() const
{
return first == last;
}


3. 所能容纳的数据类型

vector
这般的模板容器
std::vector<T>
,即是什么类型的对象都可往里装,但一个容器实例仅可存储同一数据类型的数据,也即
std::vector<T>
是非异质型(non-heterogeneous)容器;

4. push_back 一个新元素

对于一个容器,调用其成员
push_back
函数,添加新的数据成员,则新添加的数据的位置及其对应的迭代器为:

下标位置

pos = coll.size()-1;


迭代器为:

ite = coll.end() - 1;


5 .resize() 的两个重载

void resize(size_type _Newsize);
// 调用成员的默认构造
void resize(size_type _Newsize, const value_type& _Val);
// 并指定初值


比如,一种有些随机变量性质的初始化的方式:

coll.resize(sz, 1./sz);


6.
.clear()
的含义

size 为 0

capacity 不变

所以对一个容器调用其
.clear()
成员函数之后,该容器会进入到一种类似容器在初始化之前首先
.reserve()
后的结果。

也即:

std::vector<int> coll = {1, 2, 3};
coll.clear();
// size == 0
// capacity == 3
std::vector<int> coll2;
coll2.reserve();
// size == 0
// capacity == 3
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: