• Vector[C++]


    //    vector<int> vec;

    //    for(int i = 0; i < 10; i++)

    //    {

    //        vec.push_back(5);

    //    }

    //    

    //    vector<int>::iterator itr;

    //    

    //    for(itr = vec.begin(); itr != vec.end();)

    //    {

    //        if(*itr == 5)

    //        {

    //            vec.erase(itr);

    //        }

    //        else

    //        {

    //            itr++;

    //        }

    //    }

    //

    //    for(int i = 0; i < vec.size(); i++)

    //    {

    //        cout << vec.at(i) << endl;

    //    }

     

     

    C++ Vector(向量容器)

    是一个线性顺序结构。相当于数组,但其大小可以不预先指定,并且自动扩 展。它可以像数组一样被操作,由于它的特性我们完全可以将vector 看作动态数 组。

    在创建一个vector 后,它会自动在内存中分配一块连续的内存空间进行数据 2

    存储,初始的空间大小可以预先指定也可以由vector 默认指定,这个大小即 capacity ()函数的返回值。当存储的数据超过分配的空间时vector 会重新分配 一块内存块,但这样的分配是很耗时的,在重新分配空间时它会做这样的动作:

    首先,vector 会申请一块更大的内存块; 然后,将原来的数据拷贝到新的内存块中; 其次,销毁掉原内存块中的对象(调用对象的析构函数); 最后,将原来的内存空间释放掉。

    如果vector 保存的数据量很大时,这样的操作一定会导致糟糕的性能(这也 是vector 被设计成比较容易拷贝的值类型的原因)。所以说vector 不是在什么情 况下性能都好,只有在预先知道它大小的情况下vector的性能才是最优的。

    vector 的特点:

    (1) 指定一块如同数组一样的连续存储,但空间可以动态扩展。即它可以像数组 一样操作,并且可以进行动态操作。通常体现在push_back() pop_back() 
    (2) 随机访问方便,它像数组一样被访问,即支持[ ] 操作符和vector.at()
    (3) 
    节省空间,因为它是连续存储,在存储数据的区域都是没有被浪费的,但是 要明确一点vector 大多情况下并不是满存的,在未存储的区域实际是浪费的。 (4) 在内部进行插入、删除操作效率非常低,这样的操作基本上是被禁止的。 Vector 被设计成只能在后端进行追加和删除操作,其原因是vector 内部的实现 是按照顺序表的原理。

    (5) 只能在vector 的最后进行push pop ,不能在vector 的头进行push pop 。 (6) 当动态添加的数据超过vector 默认分配的大小时要进行内存的重新分配、拷 贝与释放,这个操作非常消耗性能。 所以要vector 达到最优的性能,最好在创 建vector 时就指定其空间大小。

    Vectors 包含着一系列连续存储的元素,其行为和数组类似。访问Vector中的 任意元素或从末尾添加元素都可以在常量级时间复杂度内完成,而查找特定值的 元素所处的位置或是在Vector中插入元素则是线性时间复杂度。

    1.Constructors 构造函数
    vector<int> v1; //构造一个空的vector
    vector<int> v1( 5, 42 ); //
    构造了一个包含5个值为42的元素的Vector

    2.Operators vector进行赋值或比较
    C++ Vectors能够使用标准运算符: ==, !=, <=, >=, <, 和 >. 要访问vector中的某特定位置的元素可以使用 [] 操作符两个vectors被认为是相等的,如果:
    1.
    它们具有相同的容量
    2.所有相同位置的元素相等. vectors之间大小的比较是按照词典规则.

    3.assign() Vector中的元素赋值 语法:

    void assign( input_iterator start, input_iterator end );
    // 
    将区间[start, end)的元素赋到当前vector
    void assign( size_type num, const TYPE &val );
    // 
    num个值为val的元素到vector,这个函数将会清除掉为vector赋值以前的内容.

    3

    4.at() 返回指定位置的元素 语法:

    TYPE at( size_type loc );//差不多等同v[i];但比v[i]安全;
    5.back() 返回最末一个元素
    6.begin() 返回第一个元素的迭代器
    7.capacity() 返回vector所能容纳的元素数量(在不重新分配内存的情况下) 8.clear() 清空所有元素

    9.empty() 判断Vector是否为空(返回true时为空)
    10.end() 返回最末元素的迭代器(译注:实指向最末元素的下一个位置) 11.erase() 删除指定元素

    语法:
    iterator erase( iterator loc );//删除loc处的元素
    iterator erase( iterator start, iterator end );//删除startend之间的元素

    12.front() 返回第一个元素的引用 13.get_allocator() 返回vector的内存分配器 14.insert() 插入元素到Vector

    语法:

    iterator insert( iterator loc, const TYPE &val ); //在指定位置loc前插入值为val的元素,返回指向这个元素的迭代器, void insert( iterator loc, size_type num, const TYPE &val ); //在指定位置loc前插入num个值为val的元素
    void insert( iterator loc, input_iterator start, input_iterator end ); //在指定位置loc前插入区间[start, end)的所有元素

    15.max_size() 返回Vector所能容纳元素的最大数量(上限) 16.pop_back() 移除最后一个元素
    17.push_back() Vector最后添加一个元素
    18.rbegin() 返回Vector尾部的逆迭代器

    19.rend() 返回Vector起始的逆迭代器 20.reserve() 设置Vector最小的元素容纳数量

    //为当前vector预留至少共容纳size个元素的空间 21.resize() 改变Vector元素数量的大小

    语法:
    void resize( size_type size, TYPE val ); //
    改变当前vector的大小为size,且对新创建的元素赋值val

    22.size() 返回Vector元素数量的大小 23.swap() 交换两个Vector

    语法:

    void swap( vector &from ); 

    感谢来访,共同学习!
  • 相关阅读:
    移动互联网全新体验Andoid
    《XNA高级编程:Xbox 360和Windows》51
    《XNA高级编程:Xbox 360和Windows》47
    让FCKeditor支持多用户环境(asp.net)
    《XNA高级编程:Xbox 360和Windows》45
    《XNA高级编程:Xbox 360和Windows》46
    《XNA高级编程:Xbox 360和Windows》44
    《XNA高级编程:Xbox 360和Windows》43
    hdu 4314 Save the dwarfs 夜
    poj 3150 Cellular Automaton 夜
  • 原文地址:https://www.cnblogs.com/dingxiaowei/p/3200854.html
Copyright © 2020-2023  润新知