首页 > 代码库 > 关于C++的vector的实例学习

关于C++的vector的实例学习

一、简介

我们在学习C++的过程中,学到STL是必然的,那么STL的入门就是vector了。


vector是同一种类型的对象的集合,vector很像数组,空间是连续的,能非常高效和方便的访问单个元素,但是它支持动态增加和压缩数据,所以这是矛盾的,这个问题,我们会在后期的STL源码的分析中来讲解vector的内部实现。


vector 是一个类模板(class template)。使用模板可以编写一个类定义或函数定义,而用于多个不同的数据类型。

vector需要的头文件是

#include <vector> 

using std::vector

-------------------------------------------------------------------

二、 定义和初始化

vector< T>   v; //默认为空,例如     vector<int>   v;


vector<T>  v2(v);   或v2=v1;        

vector<T> v2(v1.begin(), v1.end());//v2是v1的一个副本,  若v1.size()>v2.size()则赋值后v2.size()被扩充为v1.size()。


vector< T > v3(n,i);//v3包含n个值为i的T类型元素


vector< T > v4(n); //v4含有n个值为0的元素


int a[4]={0,1,2,3,3}; vector<int> v5(a,a+5);

//v5的size为5,v5被初始化为a的5个值。后一个指针要指向将被拷贝的末元素的下一位置。


vector<int> v6(v5);//v6是v5的拷贝


vector< 类型 > 标识符(最大容量,初始所有值);

-------------------------------------------------------------------

三、vector常用成员函数:

size()                   :返回元素的个数    

clear()                 :清除所有元素

empty()               :判断是否为空

push_back()      :在末尾添加一个元素

pop_back()       :删除最后一个元素

erase()              :删除某个元素

insert()               :插入一个元素  

[]                        :返回元素

=                        :复制副本

重载运算符:[]、=、<=、>=、>、<、!=、==、

-------------------------------------------------------------------

四、实例代码学习:

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

typedef vector<int>  INTVEC;

/*
vector‘s display function
void ShowVec(const INTVEC&  v)
{
	unsigned int i = 0;
	for(i = 0; i < v.size(); ++i)
	{
		cout << v[i] << "    ";
	}

	cout << endl;
}

*/
//利用迭代器进行显示
void   ShowVec(const    INTVEC&    v)
{
            //*it不能赋值,不能改写内容
            INTVEC::const_iterator   it;
            //任何迭代器一般重载了不等号运算符        
            //for(it = v.begin();   it  < v.end();  ++it )    
            for(it = v.begin();   it  != v.end();  ++it )
            {
                    cout   <<  *it   <<  "    ";                
            }

            cout <<  endl << endl;            
}

int main(void)
{
	INTVEC   v;
	v.push_back(1);
	v.push_back(2);
	v.push_back(3);
	v.push_back(4);
	v.push_back(5);

	cout << "Show current element : " ;
	ShowVec(v);
	cout << endl;
	
	cout << "print the last element:   "<<   v.back()  << endl; 	cout << endl;
	
	cout << "pop the last element!!!";
	v.pop_back();
	cout << endl << endl;
		
	cout << "Show current element : " ;
	ShowVec(v);
	
	cout << "erase element !!! ";
	v.erase(v.begin() + 2);           //移除一个元素  
	cout << endl;
	
	cout << "Show current element : " ;
	ShowVec(v);

	return 0;
}

-----------------------------------------------------------

运行结果:

wKioL1OeP1qyehJOAADfUNpfvZI922.jpg

-----------------------------------------------------------

最后补充一点关于迭代器的知识:

1、容器一般都支持迭代器操作

2、通过迭代器来遍历容器

3、string也可以理解为容器,只是通常当成字符串类

4、迭代器可以理解为容器的指针

5、迭代器可以理解泛型程序指针

6、vector<int>    等价为 int*

7、有些不是这样等价的

8、任何迭代器一般重载了不等号运算符

9、++运算符的重载

          后置++多了一次临时对象的构造,效率低 

          前置++无临时对象的构造


-----------------------------------------------------------

本文出自 “享受科技带来的快乐” 博客,请务必保留此出处http://liam2199.blog.51cto.com/2879872/1426780