文章目录
- 一、vector 有参构造函数
- 1、使用另外的 vector 对象初始化 - 范围构造函数
- 2、vector 容器初始化 n 个 指定元素
- 3、vector 容器拷贝构造函数
- 4、代码示例 - vector 容器有参构造函数
一、vector 有参构造函数
1、使用另外的 vector 对象初始化 - 范围构造函数
vector 动态数组容器 , 初始化时 , 可以使用另外的 vector 对象初始化 ;
下面的 vector 有参构造函数 , 会复制 begin 和 end 之间的元素到 新创建 的 vector 容器中 ;
代码语言:javascript复制template <class InputIterator>
vector (InputIterator begin, InputIterator end);
- InputIterator 参数类型说明 : 该类型一个迭代器类型 , 用于指定要复制的 vector 容器的 元素范围 ;
- begin 参数 : 指向 要复制的 其它 vector 容器 元素范围的起始位置 的迭代器 ;
- end 参数 : 指向要复制的 其它 vector 容器 元素范围的 结束位置 的迭代器 ;
特别注意 : 该构造函数并不会检查 begin 和 end 是否有效 , 在使用之前务必验证 迭代器 的范围是否合法 , 如果出现越界会导致异常 ;
代码示例 : 在下面的代码中 先初始化 vec1 容器 , 其中有 3 个元素 {1, 2, 3} , 然后调用 范围构造函数 , 将 vec1 容器指定范围 的 元素 拷贝到 vec2 容器中 , 用于为 vec2 容器初始化 ;
代码语言:javascript复制// 初始化一个 vector 容器
vector<int> vec1 {1, 2, 3};
// 使用 范围构造函数 从 vec1 容器中 复制元素到 vec2 容器
vector<int> vec2(vec1.begin(), vec1.end());
2、vector 容器初始化 n 个 指定元素
初始化一个包含 n 个 指定元素的 vector 容器 , 构造函数原型如下 :
代码语言:javascript复制template <class T, class Allocator = std::allocator<T>>
class vector {
public:
// 构造函数
explicit vector(size_type n,
const value_type& value = value_type(),
const allocator_type& a = allocator_type());
};
参数说明 :
- size_type n 参数 : 元素个数 , 将下面的 value 参数值 复制 n 次 , 无符号整数类型 , 表示 vector 的大小 ;
- const value_type& value 参数 : 要复制的元素值 ; 常量引用 , 表示每个元素的值 , 默认 类型为 T , 即 vector 中元素的类型 ;
- const allocator_type& a 参数 : 为 元素 分配内存的 内存分配器 , 默认 使用标准分配器 std::allocator<T> ;
该构造函数 与 使用两个迭代器范围进行初始化的构造函数略有不同 ;
- 使用两个迭代器范围进行初始化时 , 会复制指定范围内的所有元素到新创建的 vector 中 ;
- 本构造函数 使用 n 和 元素值 进行初始化时 , 会复制指定数量的相同元素到新创建的 vector 中 ;
代码示例 : 下面的代码中 , 创建一个 vector 动态数组容器 , 该容器中 有 5 个元素 , 每个元素值为 int 类型值 6 ;
代码语言:javascript复制// 创建一个 vector 动态数组容器
// 该容器中 有 5 个元素 , 每个元素值为 int 类型值 6
std::vector<int> vec(5, 6);
// 创建一个 vector 动态数组容器
// 该容器中 有 3 个元素 , 每个元素值为 字符 `A`
std::vector<int> vec(3, 'A');
3、vector 容器拷贝构造函数
vector 容器拷贝构造函数 用于创建一个新的 vector 容器对象 , 并将其初始化为另一个已存在的 vector 对象的副本 ;
vector 容器拷贝构造函数原型如下 : 执行拷贝构造时 , 首先 分配足够的内存 来存储复制的元素 , 然后使用分配器 复制所有元素 ;
代码语言:javascript复制template <class T, class Allocator = std::allocator<T>>
class vector {
public:
// 拷贝构造函数
vector(const vector& other);
};
确保 拷贝构造函数 中 , 所有的元素是可拷贝的 , 默认是浅拷贝 ;
代码示例 :
代码语言:javascript复制// 创建 vector 容器 1 , 并初始化
std::vector<int> vec1 {1, 2, 3};
// 使用 拷贝构造函数 创建 vec2 容器
// 将其初始化为 vec1 的副本
std::vector<int> vec2(vec1);
4、代码示例 - vector 容器有参构造函数
代码示例 :
代码语言:javascript复制#include "iostream"
using namespace std;
#include "vector"
// 自定义类
class Student{};
int main() {
// 创建一个 vector 动态数组容器
// 该容器中 有 3 个元素 , 每个元素值为 int 类型值 1
vector<int> vec1(3, 1);
// 使用 范围构造函数 从 vec1 容器中 复制元素到 vec2 容器
vector<int> vec2(vec1.begin(), vec1.end());
// 使用 拷贝构造函数 创建 vec3 容器
// 将其初始化为 vec1 的副本
vector<int> vec3(vec1);
// 控制台暂停 , 按任意键继续向后执行
system("pause");
return 0;
};
执行结果 :