C++STL之vector(基础篇二)

Q3:vector包含哪些成员函数?

成员函数 函数功能
begin() 返回指向容器中第一个元素的迭代器
end() 返回指向容器最后一个元素所在位置后一个位置的迭代器,通常和 begin() 结合使用
size() 返回实际元素个数
resize() 改变实际元素的个数
empty() 判断容器中是否有元素,若无元素,则返回 true;反之,返回 false
insert() 在指定的位置插入一个或多个元素
erase() 移出一个元素或一段元素
clear() 移出所有的元素,容器大小变为 0
swap() 交换两个容器的所有元素
push_back() 在序列的尾部添加一个元素
pop_back() 移出序列尾部的元素

:vector容器包含很多成员函数,这里只列举部分

1.push_back()和pop_back函数

vector v1={
    
    1,2,3,4,5};
      v1.push_back(6);//在末尾添加6
      for (int i = 0; i < v1.size(); ++i) {
    
    
          cout<<v1.at(i)<<' ';
      }
      **结果:1 2 3 4 5 6
vector v1={
    
    1,2,3,4,5};
      v1.pop_back();//不需要参数
      for (int i = 0; i < v1.size(); ++i) {
    
    
       cout<<v1.at(i)<<' ';
      }
      **结果·:1 2 3 4

2.swap()交换函数

利用swap函数可以实现两个vector容器内容交换,看实例:

int a[5]={
    
    1,2,3,4,5};
    vector<int> v1,v2;   
    v1.assign(a,a+5);   //初始化v1={1,2,3,4,5}
    v2.assign(3,6);     //初始化v2={6,6,6}
    v1.swap(v2);        //swap()实现vector容器交换
    //以下为输出容器元素,检测结果
    for (int i = 0; i < v1.size(); ++i) {
    
    
        cout<<v1[i]<<' ';
    }
    cout<<endl;
    for (int i = 0; i < v2.size(); ++i) {
    
    
        cout<<v2[i]<<' ';
    }
    cout<<endl;
    **结果:6 6 6 
           1 2 3 4 5
           //实现了交换

3.insert()插入函数

  • 最简单的指定位置插入数据便是v.insert(pos,x);这里的位置pos用指针来确定,x为要插入的数据,还有其他一些插入形式,看实例:
vector<int> v1, v2;
    v1 = {
    
    1, 2, 3, 4, 5};
    //指定位置插入元素
    v1.insert(v1.begin() + 2, 100);//第一个元素为指针
    for (int i = 0; i < v1.size(); ++i) {
    
    
        cout << v1.at(i) << ' ';
    }
    cout << endl;
    //**结果:1 2 100 3 4 5  //指针指向的位置变成指定数据,后面的元素依次后移

    //指定位置插入多个元素
    v1.insert(v1.begin(), 3, 99);
    for (int i = 0; i < v1.size(); ++i) {
    
    
        cout << v1.at(i) << ' ';
    }
    cout << endl;
    //**结果:99 99 99 1 2 100 3 4 5

    //指定位置插入区间数据
    v2 = {
    
    1, 2, 3, 4, 5};
    int b[5] = {
    
    10, 20, 30, 40, 50};
    v2.insert(v2.begin() + 1, b + 1, b + 3);
    for (int i = 0; i < v2.size(); ++i) {
    
    
        cout << v2.at(i) << ' ';
    }
    cout << endl;
    //**结果:1 20 30 2 3 4 5 

4.empty()判空函数

vector<int> v1, v2;
    v1 = {
    
    1, 2, 3, 4, 5};
    cout << "v1=" << v1.empty() << endl;
    cout << "v2=" << v2.empty() << endl;
    **结果:v1=0//代表空
           v2=1

5.resize()改变容器长度函数

  • 减小长度,若减少的位置存在元素,元素会被删除
vector<int> v1; //如果长度缩小,会将后面的元素删除
    v1 = {
    
    1, 2, 3, 4, 5};
    v1.resize(3);
    for (int i = 0; i < v1.size(); ++i) {
    
    
        cout << v1[i] << ' ';
        **结果:1 2 3 //原本是5个元素,当长度减小为3,原本后面的元素就被删除了
    }
  • 增加长度
vector<int> v1, v2;
    int a[5] = {
    
    1, 2, 3, 4, 5};
    v2.assign(a, a + 5);
    v2.resize(8);  //传入的参数要大于原来的容器长度
    for (int i = 0; i < v2.size(); ++i) {
    
    
        cout << v2[i] << ' ';
    }
    cout << endl;
    //结果:1 2 3 4 5 0 0 0   //增加的位置会自动补0

还可以指定扩展区域的值

vector<int> v1, v2;
    int a[5] = {
    
    1, 2, 3, 4, 5};
    v2.assign(a, a + 5);
    v2.resize(8,10);   //第一个参数为要扩展的长度,第二个参数为指定数值
    for (int i = 0; i < v2.size(); ++i) {
    
    
        cout << v2[i] << ' ';
    }
    cout << endl;
    **结果:1 2 3 4 5 10 10 10

6.erase()删除函数

vector<int> v1, v2;
    v1 = {
    
    1, 2, 3, 4, 5};
    v1.erase(v1.begin() + 2);//注意传入的是指向要删除数据的指针!
    for (int i = 0; i < v1.size(); ++i) {
    
    
        cout << v1.at(i) << ' ';
    }
    cout << endl;
    //**结果:1 2 4 5

7.clear()清除函数

vector<int> v1, v2;
    v1 = {
    
    1, 2, 3, 4, 5};
    v1.clear();
    cout << v1.empty();
    cout << endl;
    //结果:1 代表容器v1为空

猜你喜欢

转载自blog.csdn.net/weixin_74334323/article/details/130179394