STL之vector(动态数组)
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; }
 
 
                     
                     
                     
                    