STL之vector用法总结

原创 2012年03月24日 20:10:01

STL之vector用法总结

vector是一种顺序容器,有大小限制,但是可以动态的扩展,不能减小对应的空间,同数组一样,是线性排列的,在其尾不插入删除效率很高,中间的插入删除效率一般,可以向数组一样随机访问表中的元素。STL中的数据结构,都可以使用自定义的数据类型,便于扩展。

头文件:#include<vector>

using namespace std ;

1.创建对象与初始化:

(a) vector<T> v ;//创建一个T类型的vector,此时vector为空,容量为0.

(b) vector<T> v (n);//创建一个T类型的vector,容量为n

(c) vector<T> v(v1) ;//创建一个T类型的vector,为v1的一个拷贝,要求数据类型相同。

(d) vector<T> v(n1 , n2) ;//创建一个T类型的vector,含n1个元素,每个元素的值都为n2 

(e) vector<T>v(v1.begin() , v2.end()) ;//创建一个T类型的vector对象v,元素为区间[v1.begin() , v1.end())的元素。

2.assign()//分配值

list相同有两中使用方式:

v.assign(v1.begin() , v1.end()) ;//如果v1中的元素为74,此时v中有74,后面的元素默认初始化为0

v.assign(7 , 4) ;//v中的元素为74,如果原来v的大小没有7,那么会申请空间到7个。

3.back();//返回最后一元素,与list相同

4.begin();//返回第一个元素的迭代器,这些与list都相同

5.capacity()//返回vector所能容纳的元素数量(在不重新分配内存的情况下)

6.clear();//清空所有元素。

7.empty();//判断vector是否为空(返回true时为空)

8.end();//返回最末元素的迭代器(译注:实指向最末元素的下一个位置)

9.erase();//删除节点内容用到了erase()函数,有两个重载:

iterator erase( iterator loc );

iterator erase( iterator start, iterator end );

这两个迭代操作尤其需要注意,涉及到迭代器的操作都需要考虑迭代器的时效性,操作完后,迭代器就失效了,需要重新复制,才能合法访问。

10.front() ;//返回第一个元素

11.get_allocator();//返回vector的内存分配器,感觉不怎么常用

12.insert() ;//插入元素到vector中,运用类似与listinsert,含有三种形式,在指定位置,插入一个或者多个元素;

如:

v1.insert(v1.begin() + 10 , 5);//在第11个位置插入一个元素值为5

v1.insert(v1.begin() , v.begin() , v.end());//v1的开始将v的元素依次插入到v1中。

v2.insert(v2.begin() , 5 , 100) ;//v2的开头插入5100

13.max_size();//返回vector所能容纳元素的最大数量(上限)

14.pop_back();//移除最后一个元素

15.push_back();//vector最后添加一个元素

16.rbegin();//返回vector尾部的逆迭代器

17.rend();//返回vector起始的逆迭代器

18.reserve();//设置vector最小的元素容纳数量

19.resize();//改变vector元素数量的大小,重新设定大小

20.size();//返回vector元素数量的大小

21.swap() ;//交换两个vector,此处传递的是地址,不是值传递,按引用方式传递,会发生实际交换。

22.关于vector的访问方式

前面说过vector的访问方式就像数组一样,vector有三种访问方式:

1. v.at(n) ;//访问地n个元素,此时要确保不能越界。

2. v[n] ;像数组一样直接访问第n个元素,同样保证不能越界

3. 使用迭代器顺序访问:

vector<int> ::iterator it ;

for(it=v2.begin() ; it!=v2.end() ; it ++)

{

cout<<(*it) + 5<<endl ;

}

在使用迭代器的时候注意迭代器的使用范围,特别是对于增删操作的时候,尤其当心迭代器的范围,很容易导致迭代器失效。并且迭代器的效率一般不是很高,如果可以使用下表形式,最好使用下标形式来遍历以及操作对象中的元素。

vector的一个简单使用例子:

#include<iostream>
#include<string.h>
#include<stdio.h>
#include<vector>

using namespace std ;

int main()
{
	vector<int> v(10) ;
	cout<<v.size()<<endl ;
	vector<int> v1(10 , 2) ;

	int  i ;
	i =0 ;
/*	while(i < 10)
	{
		cout<<v1[i]<<endl ;
		i++ ;
	}
	*/
	vector<int> v2(20) ;
	cout<<v2.size()<<endl ;
	v2.assign(v1.begin() , v1.end()) ;
	i = 0 ;
	while(i<20)
	{
		cout<<v2[i]<<endl ;
		i++ ;
	}
	cout<<v2.capacity()<<endl ;
	v2.assign(30,4) ;
		i = 0 ;
	v2.insert(v2.begin() , 5 , 100) ;
	while(i<30)
	{
		cout<<v2[i]<<endl ;
		i++ ;
	}
	cout<<v2.size()<<endl ;
	cout<<endl ;

	vector<int> ::iterator it ;
	for(it=v2.begin() ; it!=v2.end() ; it ++)
	{
		cout<<(*it) + 5<<endl ;
	}
	cout<<"swap"<<endl;
	v2.swap(v1) ;
	for(it=v2.begin() ; it!=v2.end() ; it ++)
	{
		cout<<(*it) + 5<<endl ;
	}
	return 0 ;
}









关于vectorSTL中的算法的组合使用,会在后面的STL算法中继续介绍。

C++的标准模板库STL中实现的数据结构之顺序表vector的分析与使用

一、摘要 本文主要借助对C++的标准模板库STL中实现的数据结构的学习和使用来加深对数据结构的理解,即联系数据结构的理论分析和具体的应用实现(STL),本文是系列总结的第一篇,主要针对线性表中的顺序表...
  • LG1259156776
  • LG1259156776
  • 2015年07月22日 12:36
  • 1772

STL中vector的内存分配与正确释放

C++ STL中的vector的内存分配与释放   1.vector的内存增长 vector其中一个特点:内存空间只会增长,不会减小,援引C++ Primer:为了支持快速的随机访问,v...
  • bzhxuexi
  • bzhxuexi
  • 2014年11月03日 16:07
  • 3042

STL vector中的at方法(20)

public member function std::vector::at reference at (size_type n); const_reference a...
  • guang_jing
  • guang_jing
  • 2014年08月16日 01:04
  • 2268

STL vector用法总结

1、vector的动态增长 2、反向遍历 3.释放vector内存 4、算法
  • zuiyuezhou888
  • zuiyuezhou888
  • 2017年04月30日 23:06
  • 212

【STL】vector,string,queue,list,set用法及函数总结

这一篇博客主要就是详细记录一下C++常用到的数据结构。算是总结归纳吧。这个博客不定期更新,我遇到啥新的情况,就记录下啥情况。vector的用法及相关函数 变量的声明 vectora ...
  • u011268787
  • u011268787
  • 2017年12月02日 13:37
  • 28

【STL】vector 用法总结

一、Vector 的部分用法: #include #include using namespace std; int main() { vector a; a.push_back(...
  • zhang_xueping
  • zhang_xueping
  • 2015年08月25日 20:59
  • 336

STL &lt;vector&gt;string 与 MFC CStringArray 用法PK

  • 2010年01月29日 10:26
  • 25KB
  • 下载

STL vector用法介绍

介绍 这篇文章的目的是为了介绍std::vector,如何恰当地使用它们的成员函数等操作。本文中还讨论了条件函数和函数指针在迭代算法中使用,如在remove_if()和for_each()中的使...
  • csmqq
  • csmqq
  • 2013年07月30日 10:28
  • 540

STL vector用法介绍

介绍 这篇文章的目的是为了介绍std::vector,如何恰当地使用它们的成员函数等操作。本文中还讨论了条件函数和函数指针在迭代算法中使用,如在remove_if()和for_each()中的使...
  • ldkcumt
  • ldkcumt
  • 2016年05月14日 11:03
  • 204

STL vector用法介绍

介绍 这篇文章的目的是为了介绍std::vector,如何恰当地使用它们的成员函数等操作。本文中还讨论了条件函数和函数指针在迭代算法中使用,如在remove_if()和for_each()中的使...
  • fuwenyan
  • fuwenyan
  • 2017年06月06日 10:26
  • 190
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:STL之vector用法总结
举报原因:
原因补充:

(最多只允许输入30个字)