【C++】STL 容器 - vector 动态数组容器 ③ ( vector 容器初始化 - 初始化列表 | vector 容器赋值 - assign 函数 / swap 函数 )






一、 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::vectorstd::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;
};

执行结果 :

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/han1202012/article/details/135056923