STL-->vector

verctor vector类似于C语言中的数组,它维护一段连续的内存空间,具有固定的起始地址,因而能非常方便地进行随机存取,即 [] 操作符,但因为它的内存区域是连续的,所以在它中间插入或删除某个元素,需要复制并移动现有的元素。此外,当被插入的内存空间不够时,需要重新申请一块足够大的内存并进行内存拷贝。值得注意的是,vector每次扩容为原来的两倍,对小对象来说执行效率高,但如果遇到大对象,执行效率就低了。


  1. 构造器
  vector();
  vector( size_type num, const TYPE &val );
  vector( const vector &from );
  vector( input_iterator start, input_iterator end );
无参数 - 构造一个空的vector,             
数量(num)和值(val) - 构造一个初始放入num个值为val的元Vector 
vector(from) - 构造一个与vector from 相同的vector 
迭代器(start)和迭代器(end) - 构造一个初始值为[start,end)区间    元素的Vector(注:半开区间). 

例子

#include<vector>

using namespace std;

void print(vector<int> v)
{
    vector<int>::iterator it;
    for( it = v.begin(); it != v.end(); it++ )
    {
        cout << *it << ends;    
    }
    cout << endl;
}
int main()
{
    vector<int> v1(5,2);//2 2 2 2 2
    vector<int> v2(v1)//2 2 2 2 2
    vector<int> v3(v1.begin()+0,v1.begin()+4);// 2 2 2 2
    print(v1);
    print(v2);
    print(v3);
    return 0;
}
  1. 函数 assign
 void assign( input_iterator start, input_iterator end );
 void assign( size_type num, const TYPE &val );

assign() 函数要么将区间[start, end)的元素赋到当前vector,或者赋num个值为val的元素到vector中.这个函数将会清除掉为vector赋值以前的内容.

v1.assign(10,1);//10个1
print(v1);

at

at() 函数 返回当前Vector指定位置loc的元素的引用. at() 函数 比 [] 运算符更加安全, 因为它不会让你去访问到Vector内越界的元素. 例如, 考虑下面的代码:
for( int i = 0; i < 11; i++ ) {
  cout << "Element " << i << " is " << v1.at(i) << endl;
}
充分保证不会越界了

back back() 函数返回当前vector最末一个元素的引用

v1.back()//返回 2

begin begin()函数返回一个指向当前vector起始元素的迭代器.例如,下面这段使用了一个迭代器来显示出vector中的所有元素:

vector<int> v1( 5, 789 );
vector<int>::iterator it;
for( it = v1.begin(); it != v1.end(); it++ )
  cout << *it << endl;

clear clear()函数删除当前vector中的所有元素.

v1.clear();//v1中一个元素度没有了

empty 如果当前vector没有容纳任何元素,则empty()函数返回true,否则返回false.

end end() 函数返回一个指向当前vector末尾元素的下一位置的迭代器.注意,如果你要访问末尾元素,需要先将此迭代器自减1.

erase

iterator erase( iterator loc );
  iterator erase( iterator start, iterator end );

erase函数要么删作指定位置loc的元素,要么删除区间[start, end)的所有元素.返回值是指向删除的最后一个元素的下一位置的迭代器

front front()函数返回当前vector起始元素的引用

insert

iterator insert( iterator loc, const TYPE &val );
void insert( iterator loc, size_type num, const TYPE &val );
void insert( iterator loc, input_iterator start,input_iterator end );

在指定位置loc前插入值为val的元素,返回指向这个元素的迭代器, 在指定位置loc前插入num个值为val的元素 在指定位置loc前插入区间[start, end)的所有元素 .

vector<char> alphaVector;
for( int i=0; i < 10; i++ )
  alphaVector.push_back( i + 65 );

//插入四个C到vector中
vector<char>::iterator theIterator = alphaVector.begin();
alphaVector.insert( theIterator, 4, 'C' );

//显示vector的内容
for( theIterator = alphaVector.begin(); theIterator != alphaVector.end(); theIterator++ )
  cout << *theIterator;

这段代码将显示: 

CCCCABCDEFGHIJ

pop_back ` pop_back()函数删除当前vector最末的一个元素

push_back push_back()添加值为val的元素到当前vector末尾

swap swap()函数交换当前vector与vector from的元素

size size() 函数返回当前vector所容纳元素的数目

resize resize() 函数改变当前vector的大小为size,且对新创建的元素赋值val

v1.resize(7,1);//2 2 2 2 2 1 1

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • STL里的容器区别

    小结 我们常用到的STL容器有vector、list、deque、map、multimap、set和multiset,它们究竟有何区别,各自的优缺点是什么,...

    用户4492257
  • STL-->list

    list list类似于C语言中的双向链表,它通过指针来进行数据的访问,因此维护的内存空间可以不连续,这也非常有利于数据的随机存取,因而它没有提供 [] 操...

    用户4492257
  • 并查集

    性质 并查集算法(union_find sets)不支持分割一个集合,求连通子图、求最小生成树 用法 并查集是由一个数组pre[],和两个函数构成的...

    用户4492257
  • C++STL中vector使用策略(一)

    mathor
  • C++STL vector详解(杂谈)

    介绍 这篇文章的目的是为了介绍std::vector,如何恰当地使用它们的成员函数等操作。本文中还讨论了条件函数和函数指针在迭代算法中使用,如在remove_i...

    Angel_Kitty
  • STL vector list deque区别与实现

        向量 相当于一个数组     在内存中分配一块连续的内存空间进行存储。支持不指定vector大小的存储。STL内部实现时,首先分配一个非常大的内存空间预...

    阳光岛主
  • c++中vector向量几种情况的总结(1)

    vector 是同一种类型的对象的集合,每个对象都有一个对应的整数索引值。标准库将负责管理与存储元素相关的内存。我们把 vector 称为容器,是因为它可以包含...

    随心助手
  • C++之旅-vector

    标准库类型vector表示对象集合,并且所有的对象类型相同。由于它常常“容纳”其他对象,因此常称作容器。vector也是一个类模板。编译器根据模板创建类型或函数...

    编程珠玑
  • C++利器vector

    文章目录 1. vector: 1.1 vector 说明 1.2 vector初始化: 1.3 vector对象的常用内置函数使用(举例说明) 2....

    week
  • 迭代器模式

    今天要说的迭代器模式,实际上就是Java已经为我们实现好了,那就是Java的Iterator类。包括很多编程语言也有自己的迭代器类,但同时它也是一个设计模式,所...

    用户1148394

扫码关注云+社区

领取腾讯云代金券