devops
devops copied to clipboard
c++ 标准库中的vector是什么,它应用在哪些场景,具体原理是什么
Vector是C++标准库中的一个非常重要的容器,它提供了动态数组的功能。Vector容器是一个能够存放任意类型的动态数组,能够增加和压缩数据。
应用场景:
- 当需要存储大量数据,并且不确定最终数据量大小时,可以使用vector动态扩展存储空间。
- 当需要频繁访问元素,但不需要频繁进行插入和删除操作时,vector的性能非常优秀。
- 当需要进行数据的持久化,例如从文件中读取大量数据,然后进行处理,vector也是一个很好的选择。
原理:
- Vector内部有三个迭代器成员,分别指向动态数组的开头位置、结束位置和容量的末尾位置。当向vector容器添加元素时,首先检查当前数组是否有足够的空间容纳新的元素,如果没有,则会重新申请一块更大的内存,将原来的元素复制到新的内存中,再添加新的元素。
- Vector的内存是连续的,因此可以像使用普通数组一样使用下标访问元素,也可以使用迭代器进行访问。由于内存是连续的,所以在插入和删除元素时,需要移动大量元素,效率相对较低。
- 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可以动态添加元素,所以无论文件中有多少数据,都可以轻松处理。