C++ vector总结

468 阅读4分钟

目录

介绍

常用函数

函数实例

1、初始化vector

2、遍历

3、修改元素的值

4、删除元素

5、排序


介绍

向量(Vector)是一个封装了动态大小数组的顺序容器(Sequence Container)。跟任意其它类型容器一样,它能够存放各种类型的对象。可以简单的认为,向量是一个能够存放任意类型的动态数组。

在 vector 容器中,根据下标随机访问某个元素的时间是常数,在尾部添加一个元素的时间大多数情况下也是常数,总体来说速度很快。

在中间插入或删除元素时,因为要移动多个元素,因此速度较慢,平均花费的时间和容器中的元素个数成正比。

常用函数

 
成员函数作 用
vector()无参构造函数,将容器初始化为空
vector(int n)将容器初始化为有 n 个元素
vector(int n, const T & val)假定元素的类型是 T,此构造函数将容器初始化为有 n 个元素,每 个元素的值都是 val
vector(iterator first, iterator last)first 和 last 可以是其他容器的迭代器。一般来说,本构造函数初始化的结果就是将 vector 容器的内容变成与其他容器上的区间 [first, last) —致
void assign(int n,const T& x)设置向量中第n个元素的值为x
void clear()删除所有元素
bool empty()判断容器是否为空
void pop_back()删除容器末尾的元素
void push_back( const T & val)将 val 添加到容器末尾
int size()返回容器中元素的个数
Int capacity()当前vector分配的大小
reference at(int pos)返回pos位置元素的引用
T & front()返回容器中第一个元素的引用
T & back()返回容器中最后一个元素的引用
iterator begin()返回向量头指针,指向第一个元素
iterator end()返回向量尾指针,指向向量最后一个元素的下一个位置
reverse_iterator rbegin()反向迭代器,指向最后一个元素
reverse_iterator rend()反向迭代器,指向第一个元素之前的位置
iterator insert(iterator i, const T & val)将 val 插入迭代器 i 指向的位置,返回 i
iterator insert( iterator i, iterator first, iterator last)将其他容器上的区间 [first, last) 中的元素插入迭代器 i 指向的位置
iterator erase(iterator i)删除迭代器 i 指向的元素,返回值是被删元素后面的元素的迭代器
iterator erase(iterator first, iterator last)删除容器中的区间 [first, last)
void swap( vector <T> & v)将容器自身的内容和另一个同类型的容器 v 互换

函数实例

1、初始化vector

    (1) vector<int> a(10); //定义了10个整型元素的向量(尖括号中为元素类型名,它可以是任何合法的数据类型),但没有给出初值,其值是不确定的。

   (2)vector<int> a(10,1); //定义了10个整型元素的向量,且给出每个元素的初值为1

   (3)vector<int> a(b); //用b向量来创建a向量,整体复制性赋值

   (4)vector<int> a(b.begin(),b.begin+3); //定义了a值为b中第0个到第2个(共3个)元素

   (5)int b[7]={1,2,3,4,5,9,8};

        vector<int> a(b,b+7); //从数组中获得初值

2、遍历

#include <string>

#include <cctype>

using namespace std;

int main() {

    vector<int> myVector(10, 22);

    //通过下角标遍历。

    for (auto i = 0; i < myVector.size(); i++)

    {

        cout << " " << myVector[i];

    }

    cout << "\n";

    myVector.push_back(44);

    //通过迭代器遍历

    for (auto i = myVector.begin(); i != myVector.end(); i++)

    {

        cout << " " << *i;

    }

    cout << "\n";

    return 0;

}

3、修改元素的值

// list::sort

#include <iostream>

#include <vector>

#include <string>

#include <cctype>

using namespace std;

int main() {

    vector<int> myVector(10, 22);

    //通过下角标遍历。

    for (auto i = 0; i < myVector.size(); i++)

    {

         myVector[i]=55;

    }

    cout << "\n";

    //通过下角标遍历。

    for (auto i = 0; i < myVector.size(); i++)

    {

        cout << " " << myVector[i];

    }

    cout << "\n";

    myVector.push_back(44);

    //通过迭代器遍历修改元素的值。

    for (auto i = myVector.begin(); i != myVector.end(); i++)

    {

        if (*i == 55)

        {

            *i = 33;

        }

    }

    cout << "\n";

    for (auto i = myVector.begin(); i != myVector.end(); i++)

    {

        cout << " " << *i;

    }

    return 0;

}

4、删除元素

#include <iostream>

#include <vector>

#include <string>

#include <cctype>

using namespace std;

 

 

int main() {

    vector<int> myVector = {1,2,3,4,5,6,7,8,9,11};

    //通过下角标删除。

    for (auto i = 0; i < myVector.size(); i++)

    {

        if (i == 4)

        {

            myVector.erase(myVector.begin()+4);

        }

    }

    cout << "\n";

    //通过迭代器遍历删除。

    for (auto i = myVector.begin(); i != myVector.end();)

    {

        if (*i == 7)

        {

            i=myVector.erase(i);

        }

        else

        {

            i++;

        }

    }

    cout << "\n";

    for (auto i = myVector.begin(); i != myVector.end();i++)

    {

        cout << " " << *i;

    }

    cout << "\n";

    return 0;

}

5、排序

// list::sort

#include <iostream>

#include <vector>

#include <algorithm>

using namespace std;

bool compar(int a, int b)

{

    return a > b;

}

int main() {

    vector<int> myVector = { 1,2,4,3,5,6,7,8,9,11 };

    sort(myVector.begin(), myVector.end());

    for (auto i = myVector.begin(); i != myVector.end(); i++)

    {

        cout << " " << *i;

    }

    cout << "\n";

    sort(myVector.begin(), myVector.end(),compar);

    for (auto i = myVector.begin(); i != myVector.end(); i++)

    {

        cout << " " << *i;

    }

    cout << "\n";

    return 0;

}