【STL】vector及其初始化

vector

vector是一个强大的STL容器,速度可以与数组匹敌(有时候甚至会比数组快),普通的push_back(), erase(), front(), back(), begin()等函数这里不予介绍,主要讲如何初始化。

在定义的时候初始化

由于作者有不写using namespace std的习惯,所以读者会遇到一大堆std::vector之类的玩意儿。。

首先是一维的初始化

std::vector< int > v(n);
std::vector< int > v(n, -1);

这两个参数的意义应该是很明显的,第一个参数是开多大的空间,注意范围是0~n的,所以要像数组一样为了保险多开几位。第二个参数表示每个元素的值是多少。

然后是二维的初始化

std::vector< std::vector< int > > v(n, std::vector< int >(n));
std::vector< std::vector< int > > v(n, std::vector< int >(n, -1));

第二个参数发生了改变,意思也很简单,就是每个vector里面都是一个vector,所以嵌套定义一下就可以了。

最后是更高维的初始化

你以为我会全部列出来吗。。。像二维一样嵌套定义就可以了。

在定义后重新初始化

有时候我们已经定义过一个vector,但是在程序中又要对vector重新初始化一遍,这时候就不能这么简单了,当然还是循环大法。。。
不过既然vector这么牛逼,它还是给了我们偷懒的余地的~
接下来就是讲解传说中的resize()和assign(),resize()大家应该很熟悉,只是resize()用了之后原来的数据仍会保留,所以需要先clear()之后再resize()。至于assign(),这就是vector的memset。

std::vector< int > v(n, -1);
//先定义好
v.clear();
v.resize(m);
v.assign(m, 0x3f3f3f3f);

上面就是完成了一个将包含n个全是-1的vector改为包含m个全是0x3f3f3f3f的vector,从上面就可以知道assign()怎么用了,就是给v分配m个0x3f3f3f3f(从头开始),这下重新初始化vector就很方便了。

高维的是同理,只是要for循环一下就可以了。

std::vector< std::vector< int > > v(n, std::vector< int >(n, -1));
for (unsigned int i = 0; i < n; i++) {
    v[i].clear();
    v[i].resize(m);
    v[i].assign(m, 1);
}

应该差不多吧。

你可能感兴趣的:(STL)