std::vector的参数
时间: 2025-06-03 14:18:35 浏览: 16
### std::vector 参数用法详解
`std::vector` 是 C++ 标准模板库(STL)中的动态数组容器,提供了灵活的内存管理功能。它的模板定义如下:
```cpp
template <class T, class Alloc = allocator<T>> class vector;
```
其中:
- `T` 表示存储元素的类型。
- `Alloc` 是可选参数,默认使用 `std::allocator<T>`,用于分配和释放内存。
以下是关于 `std::vector` 参数的具体用法[^1]。
---
#### 1. 默认构造函数
创建一个空的 `std::vector`,初始大小为 0,容量也为 0。
```cpp
std::vector<int> vec1; // 创建一个空的 int 类型的 vector
```
这种方式适用于需要动态添加元素的情况[^3]。
---
#### 2. 指定大小的构造函数
通过指定大小和默认值来初始化 `std::vector`。
```cpp
std::vector<int> vec2(5); // 创建包含 5 个默认值为 0 的 int 类型 vector
std::vector<int> vec3(10, 42); // 创建包含 10 个值为 42 的 int 类型 vector
```
这种构造方式允许在创建时就分配固定数量的元素,并赋予它们初始值。
---
#### 3. 拷贝构造函数
通过另一个 `std::vector` 来初始化新的 `std::vector`。
```cpp
std::vector<int> vec4(vec3); // 使用 vec3 初始化 vec4
```
此时,`vec4` 将包含与 `vec3` 相同的元素[^2]。
---
#### 4. 移动构造函数
通过右值引用移动另一个 `std::vector` 的资源。
```cpp
std::vector<int> vec5 = std::move(vec4); // 移动 vec4 的资源到 vec5
```
此操作不会复制数据,而是将 `vec4` 的资源转移给 `vec5`,通常用于提高性能[^2]。
---
#### 5. 范围构造函数
通过迭代器范围初始化 `std::vector`。
```cpp
std::vector<int> vec6(vec3.begin(), vec3.end()); // 使用 vec3 的范围初始化 vec6
```
这种方式允许从其他容器或数组中提取元素并初始化 `std::vector`[^2]。
---
#### 6. 初始列表构造函数(C++11 及以上)
通过初始化列表直接构造 `std::vector`。
```cpp
std::vector<int> vec7 = {1, 2, 3, 4, 5}; // 使用初始化列表构造 vec7
```
这是最直观的构造方式之一,适用于已知所有元素值的情况[^2]。
---
#### 7. 成员函数 `reserve`
预先分配一定大小的内存空间,但不会改变当前的大小。
```cpp
std::vector<int> vec8;
vec8.reserve(10); // 预留至少 10 个元素的空间
```
调用 `reserve` 不会改变 `size()`,但可能改变 `capacity()`。如果需求大小小于当前容量,则 `reserve` 不会执行任何操作[^4]。
---
#### 8. 成员函数 `resize`
调整 `std::vector` 的大小,若新增元素则使用默认值或指定值填充。
```cpp
std::vector<int> vec9;
vec9.resize(5); // 调整大小为 5,新增元素值为 0
vec9.resize(10, 42); // 调整大小为 10,新增元素值为 42
```
`resize` 不仅改变大小,还会根据需要分配或释放内存。
---
#### 9. 示例代码
以下是一个综合示例,展示不同参数的用法:
```cpp
#include <iostream>
#include <vector>
int main() {
std::vector<int> vec1; // 默认构造
std::vector<int> vec2(5); // 指定大小构造
std::vector<int> vec3(10, 42); // 指定大小和默认值构造
std::vector<int> vec4(vec3); // 拷贝构造
std::vector<int> vec5 = std::move(vec4); // 移动构造
std::vector<int> vec6(vec3.begin(), vec3.end()); // 范围构造
std::vector<int> vec7 = {1, 2, 3, 4, 5}; // 初始化列表构造
vec7.reserve(10); // 预留空间
vec7.resize(8, 0); // 调整大小
for (const auto& elem : vec7) {
std::cout << elem << " ";
}
return 0;
}
```
---
###
阅读全文
相关推荐

















