C++ vector数组用法及解析
什么是vector?
vector是C++标准程序库STL中的一个类模板,提供了封装动态数组的功能。支持在数组元素的末尾进行快速的插入和删除,还能够实现快速的随机访问。
vector是一个类模板,因此我们需要使用类模板来定义vector。定义vector对象时,需要指定所存储的元素类型。
vector常见操作
下面将具体介绍vector的一些常见操作。
定义vector
vector的定义语法如下:
vector <type> name;
其中,type指需要存储的元素类型,name为vector对象的名称。
例如:
vector<int> myVector;
定义一个名为myVector的vector对象,其中每个元素的类型为int。
插入元素
在vector的末尾插入元素,可以使用push_back()函数,代码示例如下:
vector<int> myVector;
myVector.push_back(2021);
以上代码在myVector的末尾插入了整数2021。
我们也可以在vector的任意位置插入元素,只需要使用insert()函数,示例代码如下:
vector<int> myVector = {1, 2, 3, 4, 5};
myVector.insert(myVector.begin() + 2, 100);
以上代码在myVector的索引为2的位置插入了整数100。
删除元素
从vector中删除元素时,可以使用erase()函数,示例代码如下:
vector<int> myVector = {1, 2, 3, 4, 5};
myVector.erase(myVector.begin() + 2);
以上代码从myVector中删除了索引为2的元素。
我们也可以在删除多个元素时,指定起始和结束位置,示例代码如下:
vector<int> myVector = {1, 2, 3, 4, 5};
myVector.erase(myVector.begin() + 2, myVector.end() - 1);
以上代码从myVector中删除了索引为2到索引为3的元素。
访问元素
可以通过[]操作符或at()函数访问vector中的元素,示例代码如下:
vector<int> myVector = {1, 2, 3, 4, 5};
cout << myVector[2] << endl; // 输出3
cout << myVector.at(2) << endl; // 输出3
以上代码分别输出myVector中索引为2的元素。
获取vector的长度
使用size()函数可以获取vector的长度,代码示例如下:
vector<int> myVector = {1, 2, 3, 4, 5};
cout << myVector.size() << endl; // 输出5
以上代码输出myVector的长度。
vector的优点及缺点
优点
- 可以动态地增加和删除元素,不需要预先知道元素的个数;
- 支持随机访问;
- 与数组一样,vector使用的是一段连续的内存块,因此可以得到很好的缓存性能;
- vector支持STL的所有功能。
缺点
- 与数组一样,vector只能存储同一种类型的元素;
- 在插入或删除元素时,可能会造成内存的重新分配和拷贝,影响性能。
vector示例
示例1:用vector存储学生成绩
#include <iostream>
#include <vector>
using namespace std;
int main() {
vector<double> scores; // 定义存储学生成绩的vector
double score;
cout << "请逐个输入学生的成绩,输入负数以结束:" << endl;
do {
cout << "输入学生成绩:" << endl;
cin >> score;
if (score >= 0) {
scores.push_back(score); // 将成绩添加到scores里
}
} while (score >= 0);
int count = scores.size(); // 获取vector的长度
if (count == 0) {
cout << "没有输入有效的学生成绩!" << endl;
} else {
double sum = 0;
for (int i = 0; i < count; i++) {
sum += scores[i];
}
double avg = sum / count; // 计算平均分
cout << "学生成绩的平均值为:" << avg << endl;
}
return 0;
}
以上代码中,我们定义了一个双精度浮点型的vector对象scores,可以动态地存储输入的学生成绩。当输入负数时,循环结束,统计平均分。
示例2:用vector进行快速排序
#include <iostream>
#include <vector>
using namespace std;
void quickSort(vector<int>& nums, int left, int right) {
if (left > right) {
return;
}
int pivot = nums[left]; // 以left位置的数为基准
int i = left, j = right;
while (i != j) {
while (nums[j] >= pivot && i < j) {
j--;
}
while (nums[i] <= pivot && i < j) {
i++;
}
if (i < j) {
swap(nums[i], nums[j]); // 交换nums[i]和nums[j]
}
}
nums[left] = nums[i]; // 将基准数放到正确位置
nums[i] = pivot;
quickSort(nums, left, i - 1); // 递归处理左半部分
quickSort(nums, i + 1, right); // 递归处理右半部分
}
int main() {
vector<int> nums = {4, 8, 5, 7, 2, 3, 6, 1};
int count = nums.size();
quickSort(nums, 0, count - 1); // 对nums进行快速排序
for (int i = 0; i < count; i++) {
cout << nums[i] << " ";
}
cout << endl;
return 0;
}
以上代码中,我们使用vector存储待排序的数列,然后调用quickSort()函数对其进行快速排序。在quickSort()函数中,使用了定义在algorithm库中的swap()函数,可以快速交换两个元素的位置。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C++ vector数组用法及解析 - Python技术站