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是一种类型,然后编译器就会自动识别是什么类型了

图片[1]-STL之vector(动态数组)-不念博客
模板函数
template <typename T> 
void  printArr(const vector<T>& arr) {
    for (const T& it:arr) {
        cout << it << " ";
    }
    cout << endl;
}
© 版权声明
THE END