• vector 初始化所有方法



    简介:
    vector可用于代替C中的数组,或者MFC中的CArray,从许多说明文档或者网上评论,一般一致认为应该多用vector,因为它的效率更高,而且具备很好的异常安全性。而且vector是STL推荐使用的默认容器,除非你知道你有特殊需要,使用vector不能满足你的需求,例如需要容器在head和tail高效的插入和删除,或者在任何位置高效的删除和插入操作,那么你可能使用deque或者list更加合适。

    vector是连续内存容器,换句话说,标准要求所有标准库实现的时候,vector中的元素的内存必须是连续的。所以对于插入和删除的时间复杂度是很高的,因为删除或者插入的时候,需要元素的移动,即元素复制拷贝。

    vector的内部实现一般需要用到placement new ,所以效率很高,因为很多的时候,只要我们是使用得到,就可以省去很多的内存分配开销。而且vector的使用,元素可以没有默认的构造函数,但是需要拷贝构造函数的存在,这是使用CArray所无法实现的。

    使用原则:

    1. 尽量使用vector代替C风格的数组或者CArray;
    2. 尽量使用算法代替手工写的循环;
    3. 尽量使用vector本身的函数代替其他泛型算法;

    vector的接口很容易看懂和使用,这里以一些例子来说明vector的用法。

    1,填充vector

    如果我们想用原始数组的内容填充vector,那么于有很多种方式。我们来一次学习vector的几个方法。

    例如我们有数组int  v1[10] = {0,1,0,0,3,0,0,4,4,4};

    初始化方式1:

    1vector<int> v2(10); //初始化size为10可以避免数组动态增长的时候不断的分配内存
    2//v2.reserve(10);//同上,只要使用其中一个就可以了
    3forint i=0; i<10; i++ )
    4{
    5v2.push_back(v1[i]);//增加一个元素
    6}

    初始化方式2

    1vector<int> v3(&v1[0],&v1[9]);//原始数组的元素指针可以作为迭代器来使用

    初始化方式3

    1vector<int> v4;
    2v4.reserve(10);
    3v4.insert(v4.begin(), &v1[0], &v[9]);

    初始化方式4:

    1vector<int> v5(10);
    2copy(v5.begin(), &v1[0], &v1[9]);

    原始数组的元素指针可以作为迭代器来使用。

    原则:尽量使用reserve来减少不必要的内存分配次数。

    原则:尽量使用empty而不是size()==0 来判断容器是否为空

    有可能我们需要在vector中插入相应的元素

    1vector<int>::iterator i = find( v1.begin(), v1.end(), 3);
    2if( i != v1.end() )
    3{
    4v1.insert( i, 6 );
    5}

    原创文章,转载请注明: 转载自C/C++程序员之家

    本文链接地址: STL之vector的使用一(初始化vector)

  • 相关阅读:
    计算机组成原理学习总纲图
    USE RED
    既有的问题如何解决
    字符串极值题解
    扩展 KMP
    KMP
    FHQ-Treap
    STL
    iOS内存管理理论知识过一遍
    iOS中Block理论知识过一遍
  • 原文地址:https://www.cnblogs.com/wxmdevelop/p/4600762.html
Copyright © 2020-2023  润新知