vector是 C++ 标准库中的一个动态数组容器,它可以存储一组相同类型的元素【自己指定元素的类型】
1.头文件:
#include <vector>
2.声明和初始化:
//声明创建vector数组
vector<int> myVector = {1,2,3,4,5}; //声明一个整数类型的 vector
vector<double> myDoubleVector(5);//声明一个包含 5 个双精度浮点数的 vector
// ,默认初始值为0
vector<string> myStringVector = { "apple", "banana", "cherry" };
3.添加元素:
可以使用 push_back()
函数将元素添加到 vector 的末尾:
myVector.push_back(42);
myStringVector.push_back("date");
4.删除元素:
使用 pop_back()
函数删除 vector 中的最后一个元素:
myVector.pop_back();
myStringVector.pop_back();
myDoubleVector.pop_back();
使用 insert()
和 erase()
函数可以在指定位置插入和删除元素:
myVector.insert(myVector.begin()+2, 102);//相当于0为初始位置的数组,索引2的位置被插入
myStringVector.erase(myStringVector.begin() + 2);//同上
5.修改元素:
//3.修改元素的值
myVector[0] = 101;
6.访问元素:可以像数组一样去索引,或者用xx.at(index)
可以使用下标操作符 []
或 at()
函数来访问 vector 中的元素:
int firstElement = myVector[0];
string secondElement = myStringVector.at(1);
cout << myVector[3] << " " << myStringVector.at(2) << endl;
7.清空 vector:
使用 clear()
函数可以清空 vector 中的所有元素:
myVector.clear();
8.综合示例:
#include <iostream>
#include <vector>
using namespace std;
void myswap(vector<int>& nums, int i, int j);
void sortColors(vector<int>& nums) {
int low = 0;
int high = nums.size() - 1;
int i = 0;
while (i <= high) {
if (nums[i] == 0) {
myswap(nums, i, low);
low++;
i++;
}else if (nums[i] == 2) {
myswap(nums, i, high);
high--;
}
else
{
i++;
}
}
}
void myswap(vector<int>& nums, int i, int j) {
int temp;
temp = nums[j];
nums[j] = nums[i];
nums[i] = temp;
}
void printArray(const vector<int>& nums) {
for (int i = 0; i < nums.size(); i++) {
cout << nums[i] <<" ";
}
std::cout << std::endl;
}
int main() {
vector<int> arr = { 0,1,1,1,2,2,2,0,0,0,0,1,1,1};
sortColors(arr);
printArray(arr);
return 0;
}
Tip:定义一个模板函数的步骤
举个栗子:定义一个模板函数,可以遍历vector数组,这个数组可以是string,int或者是doubble类型的。====》目的是一个函数通用,不用管数组元素类型
函数printArr就是一个遍历vector数组的模板函数
1.把正常的函数定义写出来
void printArr(const vector<int>& arr) { for (const int& it:arr) { cout << it << " "; } cout << endl; }
2.将函数中具体的参数类型换成,T
void printArr(const vector<T>& arr) { for (const T& it:arr) { cout << it << " "; } cout << endl; }
3.然后用template说明T是一种类型,然后编译器就会自动识别是什么类型了
模板函数
template <typename T> void printArr(const vector<T>& arr) { for (const T& it:arr) { cout << it << " "; } cout << endl; }