vector 声明时长度预设
- 方法1
使用vector的成员函数reserve来实现。值得注意的是,在类的声明中不能够直接调用reserve函数,因为声明时并没有分配内存,没办法进行函数操作。可以通过类的构造函数来实现。
//类声明
class Foo
{
public:
vector<int> init_vec;
Foo();
~Foo();
};
//类定义
Foo::Foo(){init_vec.reserve(3)} //将init_vec的长度初始化为3 ---- 方法1
- 方法2
最简单的方法就是在使用vector的时候通过构造函数来实现。下面是vector容器类的五种常用的构造函数。
//vector常见的五种构造函数
// 0. Create an empty vector v0
std::vector<int> v0;
// 1. Create a vector v1 with 3 elements of default value 0
std::vector<int> v1(3);
// 2. Create a vector v2 with 5 elements of value 2
std::vector<int> v2(5, 2);
// 3. Create a vector v3 with 3 elements of value 1 and with the allocator of vector v2
std::vector<int> v3(3, 1, v2.get_allocator());
// 4. Create a copy, vector v4, of vector v2
std::vector<int> v4(v2);
// 5. Create a vector v5 by copying the range v4[_First, _Last)
std::vector<int> v5(v4.begin() + 1, v4.begin() + 3);
值得注意的是
也可以使用方法2实现利用vector对二维数组的构造,下面是代码示例:
std::vector<vector<int>> 2D_array(3,vector<int>(4));
实现的是3×4的二维数组。构造流程如下:
将构造一个二维向量2D_array,它含有三个元素,每个元素含有4个int型元素的向量。编译器两次调用vector的构造函数构造对象2D_array,第一次调用构造函数构造了一个无名的含有4个0的vector对象:
[0] | [1] | [2] | [3] |
---|---|---|---|
0 | 0 | 0 | 0 |
第二次调用构造函数将vector的3个元素用无名的vector对象初始化。
- 方法3
有时候某些容器是没有办法提前预设长度,可以再使用的时候加上判断的语句。如下所示:
//函数主体
int main()
{
std::queue<int> init_que;
for(int i=0;i<10;i++)
{
init_que.push(i);
if(init_que.size() == 8) //通过加判断语句是的init_que的长度不超过8
{
break;
}
}
}
PS:在使用方法2提前预设vector的长度时,机制是分配空间并初始化为0.也就是说,在使用方法2之后,如果使用其成员函数empty()的时候,vector一直是满的,vector.empty()一直未1.在具体的 应用场景中就不能通过这种方法来判断。