devops icon indicating copy to clipboard operation
devops copied to clipboard

c++ 标准库中的vector是什么,它应用在哪些场景,具体原理是什么

Open heidsoft opened this issue 2 years ago • 0 comments

Vector是C++标准库中的一个非常重要的容器,它提供了动态数组的功能。Vector容器是一个能够存放任意类型的动态数组,能够增加和压缩数据。

应用场景:

  1. 当需要存储大量数据,并且不确定最终数据量大小时,可以使用vector动态扩展存储空间。
  2. 当需要频繁访问元素,但不需要频繁进行插入和删除操作时,vector的性能非常优秀。
  3. 当需要进行数据的持久化,例如从文件中读取大量数据,然后进行处理,vector也是一个很好的选择。

原理:

  1. Vector内部有三个迭代器成员,分别指向动态数组的开头位置、结束位置和容量的末尾位置。当向vector容器添加元素时,首先检查当前数组是否有足够的空间容纳新的元素,如果没有,则会重新申请一块更大的内存,将原来的元素复制到新的内存中,再添加新的元素。
  2. Vector的内存是连续的,因此可以像使用普通数组一样使用下标访问元素,也可以使用迭代器进行访问。由于内存是连续的,所以在插入和删除元素时,需要移动大量元素,效率相对较低。
  3. Vector的扩容策略通常是当前容量的两倍,这是为了减少频繁扩容带来的性能损失。不过这个倍数也是可以根据实际需要进行调整的。

下面是一个简单的例子,向vector中动态添加元素:

#include <iostream>
#include <vector>

int main() {
    // 创建一个空的vector
    std::vector<int> myVector;
    
    // 我们不确定最终需要添加多少元素,所以使用一个循环,当用户输入的数字不为-1时,就将其添加到vector中
    int num;
    std::cout << "Enter numbers (enter -1 to end): " << std::endl;
    while(std::cin >> num && num != -1) {
        myVector.push_back(num);
    }
    
    // 输出vector中的元素
    std::cout << "Vector contains: ";
    for(int i = 0; i < myVector.size(); i++) {
        std::cout << myVector[i] << " ";
    }
    
    return 0;
}

在这个例子中,我们不知道用户会输入多少个数字,所以使用vector来动态添加元素。当用户输入-1时,结束输入,并输出vector中的所有元素。

下面是一个简单的例子,使用vector存储大量数据,并进行频繁的访问:

#include <iostream>
#include <vector>

int main() {
    // 创建一个vector并初始化为10000个元素,值分别为0, 1, 2, ..., 9999
    std::vector<int> myVector(10000);
    for(int i = 0; i < 10000; i++) {
        myVector[i] = i;
    }

    // 计算所有元素的和
    int sum = 0;
    for(int i = 0; i < myVector.size(); i++) {
        sum += myVector[i];
    }

    std::cout << "The sum of all elements is: " << sum << std::endl;

    return 0;
}

在这个例子中,我们创建了一个包含10000个元素的vector,并对所有元素进行了访问。由于vector的内存是连续的,所以访问元素的效率非常高。而且,我们并没有进行插入和删除操作,所以vector是一个非常适合的选择。

下面是一个简单的例子,从文件中读取数据到vector中,然后对数据进行处理:

#include <iostream>
#include <fstream>
#include <vector>

int main() {
    // 创建一个空的vector
    std::vector<int> myVector;

    // 打开文件
    std::ifstream file("data.txt");
    if (!file) {
        std::cout << "Unable to open file";
        return 1; // 退出程序
    }

    // 从文件中读取数据到vector
    int num;
    while (file >> num) {
        myVector.push_back(num);
    }

    // 计算并输出vector中所有元素的和
    int sum = 0;
    for (int i = 0; i < myVector.size(); i++) {
        sum += myVector[i];
    }
    std::cout << "The sum of all elements is: " << sum << std::endl;

    // 关闭文件
    file.close();

    return 0;
}

在这个例子中,我们从文件"data.txt"中读取数据到vector,然后计算并输出所有元素的和。由于vector可以动态添加元素,所以无论文件中有多少数据,都可以轻松处理。

heidsoft avatar Sep 26 '23 14:09 heidsoft