c++ vector容器定义、构造、赋值

3,930 阅读2分钟

这是我参与更文挑战的第6天,活动详情查看: 更文挑战

1. 定义

vector可以理解为是一个“动态数组”。

普通数组在确定大小后就不能拓展空间,但vector可以动态拓展(并不是在原有空间之后续接新空间,而是找更大的空间,然后将原数据拷贝到新空间,释放原空间)。

vector 容器的迭代器支持随机访问

2. vector构造函数

一共有四种方式:

(1)vector v

默认构造函数,然后再通过复制的方式,一个一个初始化元素。

		vector<int>v1;//默认构造函数,无参数
    //再将数一个一个的传进去
    for (int i = 0; i<10; i++)
    {
        v1.push_back(i);
    }
    printVector(v1);//输出 0 1 2 3 4 5 6 7 8 9

(2)vector(n ,elem)

通过n个elem进行构造。

 //通过n个element构造
    vector<int>v3(3,9);//3个9
    printVector(v3);//输出 9 9 9

(3)vector(v.begin(),v.end())

将v中将v.begin()到v.end()区间元素都拷贝给指定容器。

//将v1中v1.begin()到v1.end()区间元素都拷贝给v2
    vector<int>v2(v1.begin(),v1.end());
    printVector(v2);

(4) vector(const vector &v)

类似于c++中拷贝构造函数。

 //拷贝构造,将v1中全部元素拷贝给v2
    vector<int>v2(v1);
    printVector(v2);

3. vector赋值

一共3种方式。

    vector<int>v1;
    for (int i = 0; i<10; i++)
    {
        v1.push_back(i);
    }

(1)operator =

直接用“=”符号赋值

//赋值 operator=
    vector <int>v2;
    v2 = v1;
    printVector(v2);//输出 0 1 2 3 4 5 6 7 8 9

(2) assign(beg,end)

将beg和end区间元素赋值给另一个vector容器。

    vector <int> v3;
    v3.assign(v1.begin(),v1.end());
    printVector(v3);//输出 0 1 2 3 4 5 6 7 8 9

(3)assign(n,elem)

将n个elem拷贝赋值给本身。

    vector <int> v4;
    v4.assign(3,9);
    printVector(v4);//输出 9 9 9

4. vector插入与删除

(1)push_back(elem)

尾部插入elem。

(2)pop_back()

尾部删除最后一个元素。

(3)insert(const_iterator pos,elem)

向pos位置添加一个elem,注意pos必须是迭代器类型。

(4)insert(const_iterator pos,int count,elem)

向pos位置添加count个elem。

(5)erase(const_iterator pos)

删除迭代器指向的元素。

(6)erase(const_iterator start,const_iterator end)

删除从start到end之间的元素。

(7)clear()

删除容器中所有元素。

上述七种方法示例:

#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;

void printVector(vector<int>&v)
{
    for(vector<int>::iterator it = v.begin();it != v.end();it++)
    {
        cout<< *it <<" ";
    }
    cout<<endl;
}
//vector容器赋值
void test()
{
    vector<int>v1;//默认构造函数,无参数
    for (int i = 0; i<10; i++)
    {
        //在尾部添加元素
        v1.push_back(i);
    }
    printVector(v1);
    //在尾部删除最后一个元素
    v1.pop_back();
    printVector(v1);
    
    //在第二个元素位置添加100
    v1.insert(v1.begin()+1,100);//insert()第一个参数必须是迭代器类型
    printVector(v1);

    //在最后一个元素位置添加5个0
    v1.insert(v1.end(),5,0);
    printVector(v1);

    //删除第5个元素
    v1.erase(v1.begin()+4);
    printVector(v1);

    //删除从第3个到最后的元素
    v1.erase(v1.begin()+2,v1.end());
    printVector(v1);

    //删除容器内所有元素
    v1.clear();
    printVector(v1);
}

int main(){
    test();
}

输出结果:

0 1 2 3 4 5 6 7 8 9 
0 1 2 3 4 5 6 7 8 
0 100 1 2 3 4 5 6 7 8 
0 100 1 2 3 4 5 6 7 8 0 0 0 0 0 
0 100 1 2 4 5 6 7 8 0 0 0 0 0 
0 100