vector

vector的注意事项:

  • 需要包含头文件#include <vector>
  • vector<int> arry;意味着定义了一个一维数组arry,而vector< vector<int> > arry;意味着定义了一个二维数组arry
  • vector中的迭代器:
    Alt text

其中常用的迭代器是v.begin()和v.end()

vector的初始化方式与赋值

vector 是 C++ 标准模板库(STL)中的一个动态数组类,它可以根据需要自动调整大小,并提供许多有用的操作。vector 的初始化和赋值方式有以下几种:

  • 不带参数的构造函数: 这种方式会创建一个空的 vector,没有任何元素。例如:
vector<int> v; // 创建一个空的 vector,类型为 int;可以使用assgin等方式对他进行赋值
  • 带参数的构造函数: 这种方式可以指定 vector 的初始大小和元素值。例如:
vector<int> v(10); // 创建一个大小为 10 的 vector,每个元素的默认值为 0
vector<int> v(10, 1); // 创建一个大小为 10 的 vector,每个元素的初始值为 1
  • 拷贝构造函数: 这种方式可以利用另一个同类型的 vector 来初始化 vector,相当于复制一个 vector。例如:
vector<int> v1(5, 1); // 定义一个 vector v1,大小为 5,每个元素为 1
vector<int> v2(v1); // 通过 vector v1 初始化 vector v2,包含 v1 的所有元素
  • 区间赋值: 这种方式可以将一个区间内的元素拷贝到另一个区间中,区间可以是 vector 的迭代器,也可以是数组的地址。例如:
vector<int> v1(5, 1); // 定义一个 vector v1,大小为 5,每个元素为 1
int a[5] = {2, 2, 2, 2, 2}; // 定义一个数组 a
vector<int> v2(10); // 定义一个 vector v2,大小为 10
vector<int> v2(v1.begin(), v1.end()); // 将 v1 的所有元素拷贝到 v2,前面是闭区间会取到v1.begin的值,后面是开区间不会取到v1.end的值
vector<int> v3(v1.begin()+2, v1.end());//将 v1 的第3个元素到最后一个元素拷贝到 v3
vector<int> v4(a, a + 5, v2.begin() + 5); // 将数组 a 的所有元素拷贝到 v4 的后半部分

vector的打印方式(推荐使用第一个或第三个)

方法一:使用基本的for循环

int printvector(vector<int>&vec){
  for (int i = 0; i < vec.size(); i++) {
    cout << vec[i] << " ";
  }
  cout << endl;
  return 0;
}

方法二:使用基于范围的for循环

int printvector(vector<int>&vec) {
  for (auto element:vec) {
    cout << element << " ";
  }
  cout << endl;
  return 0;
}

方法三:使用迭代器

int printvector(vector<int>&vec) { 
  for (auto it = vec.begin(); it != vec.end(); it++) {
    cout << *it << " ";
  }
  cout << endl;
  return 0;
}

vector的常用函数(v.empty()、v.capacity()、v.size())

int emptyvector(vector<int>&v){
        if(v.empty())//如果vector容器为空,则v.empty()结果为真
            cout << "vector容器为空" << endl;
        else
            cout << "vector容器不为空" << endl;

        cout << "vector容器容量为:"<< v.capacity()<<endl;
        cout << "vector容器大小为:"<< v.size()<< endl;
    }

vector的插入和删除

插入:

int insertvector(){
        vector<int>v1;
        givevector(v1);//赋值v1

        v1.push_back(1);//在尾端元素后插入元素1

        v1.insert(v1.begin(),11);//在迭代器begin()指向位置插入元素11,被指向的元素会在插入元素后面
      
        v1.insert(v1.begin(),2,11);//在迭代器begin()指向位置插入2个元素11,被指向的元素会在插入元素后面

    }

删除:

int deletevector(){
        vector<int>v1;
        givevector(v1);//赋值v1

        v1.pop_back();//删除尾端元素

        v1.erase(v1.begin());//删除迭代器指向的元素

        v1.erase(v1.begin(),v1.begin()+2);//删除前迭代器到后迭代器之间的元素,前闭后开,前迭代器指向的元素会被删除,后迭代器指向的元素不会被删除
        
        v1.clear();//删除容器中所有元素
        
    }

vector数据读取

void datawrite(){
        vector<int>v1;
        givevector(v1);//赋值v1

        cout << "vector容器中第二个元素为:" << v1[1]<< endl;
        cout << "vector容器中第三个元素为:" << v1.at(2)<< endl;
        cout << "vector容器中第一个元素为:" << v1.front()<< endl;
        cout << "vector容器中最后一个元素为:" << v1.back()<< endl;
    }