您现在的位置是:首页 > 技术文章网站首页技术文章

[STL]认识vector

  • WangYe
  • 2020-08-02 14:34:46
  • 523 次阅读
stl容器中的vector认识

需要使用数据情况下,可以考虑vector;


特点:

    1. 一个动态分配的数组(当数组空间内存不足时,都会执行:分配新空间-复制元素-释放原空间);

    2. 当删除元素时,不会释放限制的空间,所以向量容器的容量(capacity)大于向量容器大小(size);

    3. 对删除或插入操作,执行效率不高,越靠后插入或删除指向效率越高;

    4. 高效率的随机访问容器;


创建vector对象:

    1. vector v1;

    2. vector v2(10);


优缺点和使用场景:

    优点:支持随机访问,即 [] 操作和 .at(),所以查询效率高。
    缺点:当向其头部或中部插入或删除元素时,为了保持原本的相对次序,插入或删除点之后的所有元素都必须移动,所以插入的效率比较低。
    适用场景:适用于对象简单,变化较小,并且频繁随机访问的场景。


基本操作:

 v.capacity();  //容器容量
 v.size();      //容器大小
 v.at(int idx); //用法和[]运算符相同
 v.push_back(); //尾部插入
 v.pop_back();  //尾部删除
 v.front();     //获取头部元素
 v.back();      //获取尾部元素
 v.begin();     //头元素的迭代器
 v.end();       //尾部元素的迭代器
 v.insert(pos,elem); //pos是vector的插入元素的位置
 v.insert(pos, n, elem) //在位置pos上插入n个元素elem
 v.insert(pos, begin, end);
 v.erase(pos);   //移除pos位置上的元素,返回下一个数据的位置
 v.erase(begin, end); //移除[begin, end)区间的数据,返回下一个元素的位置
 
 reverse(pos1, pos2); //将vector中的pos1~pos2的元素逆序存储


实例:

#include <iostream>
#include <vector>
using namespace std;
int main()
{
 vector<char> v1;
 vector<char>::iterator iter1;
 vector<char>::iterator iter2;
 v1.push_back('m');
 v1.push_back('n');
 v1.push_back('o');
 v1.push_back('p');

 cout << "v1.front() = " << v1.front() << endl;
 cout << "v1.back() = " << v1.back() << endl;

 iter1 = v1.begin();
 cout << *iter1 << endl;
 cout <<*v1.begin()<<endl;
 iter2 = v1.end()-1;    //注意v1.end()指向的是最后一个元素的下一个位置,所以访问最后一个元素
                        //的正确操作为:v1.end() - 1;
 cout << *iter2 << endl;
 cout <<*(v1.end()-1)<<endl;
 return 0;
}

运行结果:

图片.png

实例二:

以下例子针对整型定义了一个 vector,插入 6 个元素,然后打印所有元素

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

int main(int argc,char* argv[])
{
    vector<int> vecTemp;
    
    for(int i = 0;i < 6;i++)
    {
        vecTemp.push_back(i);
    }
    for(int i = 0;i < vecTemp.size();i++)
    {
        cout << vecTemp[i] << "";    //输出:0 1 2 3 4 5
    }
    cout << endl;
    
    return 0;
}


TAG: STL vector

文章评论 (0)



Top