C++ vector学习笔记

时间:2022-07-22
本文章向大家介绍C++ vector学习笔记,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

vector

vector是表示可变大小数组的序列容器,即动态顺序表

像数组一样,vector也采用连续得到存储空间来存储元素,可以使用下标访问

又不像数组,vector大小可以动态改变,而且大小会被容器自动处理

初始化

#include<iostream>
#include<vector>
using namespace std;
int main()
{
        vector<int>v{ 0,1,2,3,4,5,6,7 };  //0 1 2 3 4 5 6 7
        //从数组中获得初始值

        vector<int> v1(10);  //
        //定义了10个整型元素的向量
        //尖括号为元素类型名,没有给初始值

        vector<int>v2(10, 1);  //1 1 1 1 1 1 1 1 1 1
        //定义了10个整型元素的向量,且初始值为1

        vector<int>v3(v);  //0 1 2 3 4 5 6 7
        //用v向量来创建v3,使v3和v一样

        vector<int>v4(v.begin(), v.begin()+3);  //0 1 2
        //基于迭代器的初始化,左闭右开
}

非更易型操作(Nonmodifying Operating)

不改变容器内元素的操作

#include<iostream>
#include<vector>
using namespace std;
int main()
{
        vector<int>a{ 1,2,3,4,5 };

        cout << a.size() << endl;  //5
        //返回当前元素个数

        cout << a.empty() << endl;  //0
        //判空,相当于size()==0

        cout << a.capacity() << endl;  //5
        //返回容器当前最大容量

        a.reserve(100);  //若容量不足,则扩容为100
        cout << a.size() << endl;  //5
        cout << a.capacity() << endl;  //100

        a.shrink_to_fit();  //降低容量,使capacity()=size()
        cout << a.capacity() << endl;  //5
}

赋值操作

#include<iostream>
#include<vector>
using namespace std;
int main()
{
        vector<int>b{ 1,2,3,4,5 };
        vector<int>c;

        c = b;  //1 2 3 4 5
        //将b的全部元素赋值给c

        c.assign(5, 1);  //1 1 1 1 1
        //给c赋值5个1

        c.assign(b.begin(), b.end()-1);  //1 2 3 4
        //基于迭代器的赋值,左闭右开

        c.swap(b);  //b:1 2 3 4   c:1 2 3 4 5
        //置换b,c的数据

        swap(b, c);  //b:1 2 3 4 5   c:1 2 3 4
        //置换b,c的数据
}

元素访问

只有at()会检查边界,若越界,抛出 out_of_range 异常

#include<iostream>
#include<vector>
using namespace std;
int main()
{
        vector<int>d{ 0,1,2,3,4,5 };

        cout << d[2] << endl;  //2
        //返回索引所指向的元素

        cout << d.at(2) << endl;  //2
        //返回索引所指向元素,会进行边界检查

        cout << d.front() << endl;  //0
        //返回第一个元素

        cout << d.back() << endl;  //5
        //返回最后一个元素
}

插入和移除

#include<iostream>
#include<vector>
using namespace std;
int main()
{
        vector<int>e{ 1,2,3 };

        e.push_back(4);  //1 2 3 4
        //在末尾添加元素 4

        e.pop_back();  //1 2 3
        //移除末尾元素,不返回该元素

        e.insert(e.begin()+1, 2);  //1 2 2 3
        //在begin()+1位置插入2

        e.insert(e.begin() + 1, 3, 5);  //1 5 5 5 2 2 3
        //在begin()+1位置插入3个5

        e.insert(e.begin(), e.begin(), e.begin() + 2);  //1 5 1 5 5 5 2 2 3
        //在begin()位置插入前两个元素

        e.erase(e.begin()+1);  //1 1 5 5 5 2 2 3
        //移除begin()+1位置的元素,返回下一个元素的位置

        e.erase(e.begin() + 1, e.begin() + 6);  //1 2 3
        //移除begin()+1到begin()+6所指向的元素,左闭右开,返回下一个元素的位置

        e.clear();  //清空
}