
【C++】STL 容器 - vector 动态数组容器 ③ ( vector 容器初始化 - 初始化列表 | vector 容器赋值 - assign 函数 / swap 函数 )
一、 vector 容器 初始化1、vector 容器 初始化2、使用 std::initializer_list 初始化列表 初始化 vector 容器3、代码示例 - vector 容器初始化二、 vector 容器赋值1、vector 容器赋值方法2、代码示例 - vector 容器赋值
·
文章目录
一、 vector 容器 初始化
1、vector 容器 初始化
vector 容器是 C++ 标准模板库 ( Standard Template Library , STL ) 中的一个动态数组 容器 , 该容器有如下初始化方式 :
- 默认初始化 : 创建一个空的 vector 容器 ; 默认情况下容器是空的 ;
// 创建一个空的 vector 容器 , 元素类型是 int 类型
vector<int> vec;
- 使用 std::initializer_list 初始化列表 : 创建 vector 容器时 , 直接指定元素值 ;
// 创建一个 vector 容器 , 元素类型是 int 类型
// 为其初始化 1, 2, 3 三个元素值
vector<int> vec {1, 2, 3};
- 使用数组初始化 : 向 vector 容器 构造函数中 传递一个数组 和 数组个数 , 来初始化 vector 容器
// 先声明一个数组
int array[] = {1, 2, 3, 4, 5};
// 将整个数组的值 初始化给 vector 容器
vector<int> vec(array, array + sizeof(array) / sizeof(int));
- 使用迭代器范围初始化 : 通过传递两个迭代器来指定要复制的元素范围 ;
// 初始化一个 vector 容器
vector<int> vec1 {1, 2, 3};
// 使用 范围构造函数 从 vec1 容器中 复制元素到 vec2 容器
vector<int> vec2(vec1.begin(), vec1.end());
2、使用 std::initializer_list 初始化列表 初始化 vector 容器
在之前的有参构造函数中 , 介绍了几种 vector 初始化方式 , 这里
std::initializer_list
是一个 C++11 引入的模板类 , 它用于初始化 容器对象 ;
如果需要用一组值来初始化一个 std::vector
或 std::list
容器 时 , std::initializer_list
非常有用 ;
使用 std::initializer_list
初始化 vector 容器 , 可以先声明 std::initializer_list
, 再使用已声明的 std::initializer_list
初始化 vector 容器 ; 如下代码示例 :
// 声明 initializer_list
std::initializer_list<int> initList = {1, 2, 3, 4, 5};
// 使用 initializer_list 初始化 vector
std::vector<int> vec(initList);
也可以直接初始化时 , 指定 std::initializer_list
;
// 使用 initializer_list 初始化 vector
// 下面两种方式是等价的
std::vector<int> vec5{ 1, 2, 3, 4, 5 };
std::vector<int> vec6 = { 1, 2, 3, 4, 5 };
3、代码示例 - vector 容器初始化
代码示例 :
#include "iostream"
using namespace std;
#include "vector"
// 自定义类
class Student{};
int main() {
// 1. 默认初始化
// 创建一个空的 vector 容器 , 元素类型是 int 类型
vector<int> vec;
// 2. 创建一个 vector 动态数组容器
// 该容器中 有 3 个元素 , 每个元素值为 int 类型值 1
vector<int> vec1(3, 1);
// 3. 使用 范围构造函数 从 vec1 容器中 复制元素到 vec2 容器
vector<int> vec2(vec1.begin(), vec1.end());
// 4. 使用 拷贝构造函数 创建 vec3 容器
// 将其初始化为 vec1 的副本
vector<int> vec3(vec1);
// 5. 使用初始化列表初始化
// 声明 initializer_list
std::initializer_list<int> initList = { 1, 2, 3, 4, 5 };
// 使用 initializer_list 初始化 vector
std::vector<int> vec4(initList);
// 6. 使用初始化列表初始化
// 使用 initializer_list 初始化 vector
// 下面两种方式是等价的
std::vector<int> vec5{ 1, 2, 3, 4, 5 };
std::vector<int> vec6 = { 1, 2, 3, 4, 5 };
// 控制台暂停 , 按任意键继续向后执行
system("pause");
return 0;
};
执行结果 :
二、 vector 容器赋值
vector 容器在初始化时 , 可以设置初始化值 , 在上一个章节中已经进行了讨论 ;
vector 容器初始化完毕后 , 要想再 修改 vector 容器 内容 ,
- 除了 赋值 外 ,
- 还可以 增删 元素 , 如 : insert 插入元素 , push_back 末尾添加元素 等 ;
本章节中 , 主要讨论初始化完毕的 赋值 情况 ;
1、vector 容器赋值方法
vector 容器赋值方法 :
- assign 函数赋值 : 清空容器中的所有元素 , 并用新分配的元素填充容器 ; n 表示要分配的元素数量,val 表示要分配的元素值 ;
void assign(size_type n, const value_type& val);
// 1. 将 vec2 容器中的值替换为 3 个 int 类型数据 8
vector<int> vec2;
vec2.assign(3, 8);
- assign 函数赋值 : 清空容器中的所有元素 , 并用新分配的元素填充容器 ; first 和 last 是迭代器,表示要分配的元素范围 ;
void assign(InputIt first, InputIt last);
// 2. 将 vec3 容器中的值替换为 vec1 容器中的 指定范围数据
vector<int> vec3;
vec3.assign(vec1.begin(), vec1.end());
- swap 函数交换数据 : 将本 vector 容器中的数据 与 other 容器中的数据进行交换 ;
void swap(vector& other);
// 3. 将 vec1 与 vec2 容器中的数据进行交换
vec1.swap(vec2);
- 重载等号操作符函数 : 使用 vector 容器的 等号操作符 , 将另外一个 vector 容器的内容赋值给当前容器 ;
vector& operator=(const vector& vec);
// 4. 使用重载等号操作符函数 进行赋值
vector<int> vec4;
vec4 = vec1;
2、代码示例 - vector 容器赋值
代码示例 :
#include "iostream"
using namespace std;
#include "vector"
// 自定义类
class Student{};
int main() {
// 创建一个 vector 容器 , 使用初始化列表进行初始化
vector<int> vec1{ 1, 2, 3, 4, 5 };
// 1. 将 vec2 容器中的值替换为 3 个 int 类型数据 8
vector<int> vec2;
vec2.assign(3, 8);
// 2. 将 vec3 容器中的值替换为 vec1 容器中的 指定范围数据
vector<int> vec3;
vec3.assign(vec1.begin(), vec1.end());
// 3. 将 vec1 与 vec2 容器中的数据进行交换
vec1.swap(vec2);
// 4. 使用重载等号操作符函数 进行赋值
vector<int> vec4;
vec4 = vec1;
// 控制台暂停 , 按任意键继续向后执行
system("pause");
return 0;
};
执行结果 :
更多推荐
所有评论(0)