C++ 学习之vector容器

简介: C++ 学习之vector容器

C++ vector容器构造函数

C++中,vector容器有多个构造函数可供使用。以下是常用的几种构造函数:

  1. 默认构造函数:
vector<T> vec;
  1. 创建一个空的vector容器,其中T为元素的类型。
  2. 带有初始元素个数的构造函数:
vector<T> vec(size);
  1. 创建一个包含指定数量(size)个默认构造的元素的vector容器。
  2. 使用相同值初始化所有元素的构造函数:
vector<T> vec(size, value);
  1. 创建一个包含指定个数(size)个值为value的元素的vector容器。
  2. 利用迭代器范围构造函数:
vector<T> vec(first, last);
  1. 创建一个包含[first, last)范围内元素的vector容器。其中,first和last是迭代器,指向某个序列(比如数组)中的元素。
  2. 拷贝构造函数:
vector<T> vec(otherVec);
  1. 创建一个与另一个已存在的vector容器(otherVec)完全相同的副本。

这些构造函数提供了不同的方式来创建并初始化一个vector容器。根据需要选择合适的构造函数来构造vector对象。

C++ vector容器赋值操作

在C++中,vector容器支持多种赋值操作,以下是常用的几种赋值方式:

  1. 使用赋值操作符(=)对整个vector进行赋值:
vector<T> vec1 = {1, 2, 3, 4, 5};
vector<T> vec2;
vec2 = vec1;
  1. 上述代码将vec1的所有元素赋值给vec2,两个vector容器中的元素完全相同。
  2. 使用assign()函数赋值:
vector<T> vec3;
vec3.assign(5, 10);
  1. 上述代码将vec3的元素全部替换为5个值为10的元素。
  2. 使用迭代器和区间进行赋值:
vector<T> vec4 = {1, 2, 3, 4, 5};
vector<T> vec5;
vec5.assign(vec4.begin(), vec4.end());
  1. 上述代码使用vec4的begin和end迭代器指定的范围来给vec5赋值,vec5将和vec4的内容一致。
  2. 使用swap函数交换两个vector的内容:
vector<T> vec6 = {1, 2, 3};
vector<T> vec7 = {4, 5, 6};
vec6.swap(vec7);
  1. 上述代码将vec6和vec7的内容进行交换,最终vec6中的元素变为{4, 5, 6},vec7中的元素变为{1, 2, 3}。

C++ vector容器容量和大小

在C++中,vector容器提供了容量(capacity)和大小(size)两个成员函数来描述容器的状态。

  1. 容量(capacity)指的是vector容器在重新分配内存之前可以容纳的元素数量。vector容器会自动管理内存,并在需要时动态分配更多的空间来存储元素。
  • 使用capacity()函数可以获取当前vector容器的容量:
vector<T> vec;
int capacity = vec.capacity();
  • 如果想要改变vector容器的容量,可以使用reserve()函数或者resize()函数:
  • reserve()函数用于预留空间,但并不改变vector容器的大小。
vector<T> vec;
vec.reserve(10);  // 预留10个元素的空间
  • resize()函数用于改变vector容器的大小,并可选地指定默认值。
vector<T> vec;
vec.resize(5);          // 改变为5个元素的大小,默认值为元素类型的默认构造函数的值
vec.resize(10, value);  // 改变为10个元素的大小,并使用指定的value做为默认值
  1. 大小(size)指的是vector容器中当前实际包含的元素数量。
  • 使用size()函数可以获取vector容器的当前大小:
vector<T> vec;
int size = vec.size();
  • 可以通过向vector容器中添加或删除元素来改变其大小:
  • 使用push_back()函数将一个元素添加到vector容器的尾部:
vector<T> vec;
vec.push_back(value);
  • 使用pop_back()函数移除vector容器尾部的元素:
vector<T> vec;
vec.pop_back();
  • 使用resize()函数也可以改变vector容器的大小,详见上述容量的第二点。

总而言之,容量表示vector容器可以容纳的元素数量,大小表示vector容器当前实际包含的元素数量。可以通过成员函数和相应的操作来获取和改变容量和大小。

C++ vector容器插入和删除

在C++中,vector容器提供了多种方法来插入和删除元素。以下是常用的插入和删除操作:

  1. 插入元素:
  • 在指定位置插入单个元素:
vector<T> vec = {1, 2, 3, 4, 5};
auto it = vec.begin() + 2;  // 指向第三个位置
vec.insert(it, 10);  // 在第三个位置前插入元素10
  • 在指定位置插入多个元素:
vec.insert(it, 3, 10);  // 在第三个位置前插入3个值为10的元素
  • 在指定位置插入另一个vector的元素:
vector<T> anotherVec = {6, 7, 8};
vec.insert(vec.begin() + 2, anotherVec.begin(), anotherVec.end());  // 在第三个位置前插入anotherVec的所有元素
  • 在末尾插入元素:
vec.push_back(20);  // 在末尾添加元素20
  1. 删除元素:
  • 删除指定位置的元素:
vec.erase(vec.begin() + 2);  // 删除第三个位置的元素
  • 删除指定范围的元素:
vec.erase(vec.begin() + 2, vec.begin() + 5);  // 删除第三个到第五个位置之间的元素
  • 删除末尾元素:
vec.pop_back();  // 删除末尾元素
  • 清空整个vector:
vec.clear();  // 清空所有元素

C++ vector容器数据存取

在C++中,vector容器提供了多种方式来进行数据的存取操作。以下是常用的方法:

  1. 通过下标访问元素:
vector<int> vec = {1, 2, 3, 4, 5};
int element = vec[2]; // 访问第三个元素,下标从0开始
  1. 使用at()函数进行安全的访问元素(会进行越界检查):
int element = vec.at(2); // 访问第三个元素
  1. 使用迭代器访问元素:
vector<int>::iterator it = vec.begin(); // 指向第一个元素
int firstElement = *it; // 获取第一个元素的值
  1. 使用for循环遍历所有元素:
for(int i = 0; i < vec.size(); i++) {
    cout << vec[i] << " "; // 输出每个元素
}
  1. 使用范围-based for 循环(C++11及以上版本):
for(int num : vec) {
    cout << num << " "; // 输出每个元素
}
  1. 获取首尾元素:
int firstElement = vec.front(); // 获取首元素的值
int lastElement = vec.back(); // 获取末尾元素的值

C++ vector容器互换容器

在C++中,可以使用std::swap()函数来交换两个vector容器的内容。swap函数会交换两个容器中的元素,而不会复制整个容器。

下面是使用std::swap()函数交换两个vector容器的示例代码:

#include <iostream>
#include <vector>
int main() {
    std::vector<int> vec1 = {1, 2, 3};
    std::vector<int> vec2 = {4, 5, 6};
    
    std::cout << "vec1: ";
    for (int num : vec1) {
        std::cout << num << " ";
    }
    std::cout << std::endl;
    
    std::cout << "vec2: ";
    for (int num : vec2) {
        std::cout << num << " ";
    }
    std::cout << std::endl;
    
    std::swap(vec1, vec2); // 交换vec1和vec2的内容
    
    std::cout << "After swap:" << std::endl;
    
    std::cout << "vec1: ";
    for (int num : vec1) {
        std::cout << num << " ";
    }
    std::cout << std::endl;
    
    std::cout << "vec2: ";
    for (int num : vec2) {
        std::cout << num << " ";
    }
    std::cout << std::endl;
    
    return 0;
}

输出结果:

vec1: 1 2 3
vec2: 4 5 6
After swap:
vec1: 4 5 6
vec2: 1 2 3

通过使用std::swap()函数,vec1和vec2的内容被互换了。注意,std::swap()函数是一个标准库函数,需要包含头文件来使用。这样可以高效地交换两个vector容器的内容。

C++ vector容器预留空间

在C++中,可以使用vector容器的reserve()函数来预留存储空间,以提前为容器分配一定大小的内存,从而提高程序的性能。预留空间后,当向vector容器添加元素时,不会频繁地重新分配内存,从而减少了内存分配和拷贝的开销。

下面是使用reserve()函数预留vector容器空间的示例代码:

#include <iostream>
#include <vector>
int main() {
    std::vector<int> vec;
    
    std::cout << "Capacity before reserve: " << vec.capacity() << std::endl;
    
    vec.reserve(100); // 预留至少能容纳100个元素的空间
    
    std::cout << "Capacity after reserve: " << vec.capacity() << std::endl;
    
    return 0;
}

运行上述示例代码,输出结果类似如下:

Capacity before reserve: 0
Capacity after reserve: 100

在这个示例中,通过调用vec.reserve(100)函数,使得vector容器vec的容量调整为至少能容纳100个元素的大小。

关注我,不迷路,共学习,同进步

关注我,不迷路,共学习,同进步

相关文章
|
22天前
|
编译器 C语言 C++
配置C++的学习环境
【10月更文挑战第18天】如果想要学习C++语言,那就需要配置必要的环境和相关的软件,才可以帮助自己更好的掌握语法知识。 一、本地环境设置 如果您想要设置 C++ 语言环境,您需要确保电脑上有以下两款可用的软件,文本编辑器和 C++ 编译器。 二、文本编辑器 通过编辑器创建的文件通常称为源文件,源文件包含程序源代码。 C++ 程序的源文件通常使用扩展名 .cpp、.cp 或 .c。 在开始编程之前,请确保您有一个文本编辑器,且有足够的经验来编写一个计算机程序,然后把它保存在一个文件中,编译并执行它。 Visual Studio Code:虽然它是一个通用的文本编辑器,但它有很多插
|
30天前
|
存储 C++ 索引
【C++打怪之路Lv9】-- vector
【C++打怪之路Lv9】-- vector
20 1
|
1月前
|
编译器 C++
【C++】—— vector模拟实现
【C++】—— vector模拟实现
|
1月前
|
Kubernetes Linux 持续交付
docker容器学习
【10月更文挑战第1天】
36 1
|
1月前
|
算法 C++ 容器
C++之打造my vector篇(下)
C++之打造my vector篇(下)
26 0
|
1月前
|
存储 编译器 C++
C++之打造my vector篇(上)
C++之打造my vector篇(上)
25 0
|
1月前
|
算法 C++ 容器
【C++】—— vector使用
【C++】—— vector使用
|
1月前
|
存储 缓存 C++
C++番外篇——list与vector的比较
C++番外篇——list与vector的比较
21 0
|
1月前
|
C++
C++番外篇——vector的实现
C++番外篇——vector的实现
46 0
|
1月前
|
存储 C++ 容器
C++入门8——vector的使用
C++入门8——vector的使用
66 0