C++ 小记 vector 容器(二)

如何利用迭代器获取vector的最后一个元素

vector<int>::iterator demo_p = demo.begin();

iterator 迭代器 简单的理解就像是指针。获取demo_p 所指向的的值,要加 * 

#include <iostream>
#include <stdlib.h>
#include <vector>
using namespace std;



int main(void)
{

	vector<int> demo(5); //创建一个叫demo的容器,5个元素,元素的类型为int,一般默认初始化值为0

	for(int i = 0; i < demo.size(); i++) 
	{
		demo.at(i) = i;
		cout << demo[i] << " ";
	}
	cout << endl;

	vector<int>::iterator demo_p = demo.begin();
	cout <<  *demo_p << endl;

	demo_p = demo.end(); //或者demo_p = demo.end() - 1;注意的是,这里的“-1”,实际上是-sizeof(int)
	demo_p--;
	cout <<  *demo_p << endl;
	//错误观点:通过vector::end()能获取指向最后一个元素的指针。 
	//实际上,通过上面的方法获取的是指向末尾元素再下一个位置的指针。

	//运行结果:
	//0 1 2 3 4
	//0
	//4
	//请按任意键继续. . .



***********************************************************

#include <iostream>
#include <stdlib.h>
#include <vector>
using namespace std;



int main(void)
{

	vector<int> demo(5); //创建一个叫demo的容器,5个元素,元素的类型为int,一般默认初始化值为0

	for(int i = 0; i < demo.size(); i++) 
	{
		demo.at(i) = i;
		cout << demo[i] << " ";
	}
	cout << endl;

	vector<int>::iterator demo_p = demo.begin();
	cout <<  *demo_p << endl;

	demo_p = demo.end(); //或者demo_p = demo.end() - 1;注意的是,这里的“-1”,实际上是-sizeof(int)
	demo_p--;
	cout <<  *demo_p << endl;
	//错误观点:通过vector::end()能获取指向最后一个元素的指针。 
	//实际上,通过上面的方法获取的是指向末尾元素再下一个位置的指针。

	//运行结果:
	//0 1 2 3 4
	//0
	//4
	//请按任意键继续. . .


	cout <<  "******************************" << endl;
	//第二种,输出的方法
	for (demo_p = demo.begin(); demo_p != demo.end(); demo_p++)
	{
		cout <<  *demo_p << " ";
	}
	cout << endl;
	


	system("pause");
	return 0;
}






*********************************************************************************


//下面列举了部分常用的功能
// 定义一个vector
std::vector<int> c;
// 可以使用的功能

c.clear()			    移除容器中所有数据。

c.empty()			    判断容器是否为空。

c.erase(pos)		    删除pos位置的数据

c.erase(beg,end)		删除[beg,end)区间的数据

c.front()			    传回第一个数据。

c.insert(pos,elem)		在pos位置插入一个elem拷贝

c.pop_back()			 删除最后一个数据。

c.push_back(elem)		在尾部加入一个数据。

c.resize(num)			重新设置该容器的大小

c.size()				回容器中实际数据的个数。

c.begin()				返回指向容器第一个元素的迭代器

c.end()				    返回指向容器最后一个元素的迭代器


************************************************************************************************

//对于二维vector的定义。
//定义一个10个vector元素,并对每个vector符值1-10。

#include <iostream>
#include <stdlib.h>
#include <vector>
using namespace std;

//对于二维vector的定义。
//定义一个10个vector元素,并对每个vector符值1-10。

int main(void)
{

	int i = 0, j = 0;
	//定义一个二维的动态数组,有10行,每一行是一个用一个vector存储这一行的数据。
	//所以每一行的长度是可以变化的。之所以用到vector<int>(0)是对vector初始化,否则不能对vector存入元素。

	vector< vector<int> > Array( 10, vector<int>(0) );
	//vector<int> demo(10, 0) 变量名叫demo ,  10个元素,元素类型为int,值为0
	//so,定义一个10个vector元素. 变量名叫Array, 里面有10个元素,元素的类型为vector<int> ,
	

	for( j = 0; j < 10; j++ ) // j 相当于Array( 10, vector<int>(0) )中的10的存在。
	{
		for ( i = 1; i < 10; i++ ) //i, 这个是元素的类型为vector<int> ,相当于列。这个是可变的。
		{						  //每行是一个vector<int>类型,该类型的值,可以变化
			Array[ j ].push_back( i );
		}
	}


	for( j = 0; j < 10; j++ )
	{
		for( i = 0; i < Array[ j ].size(); i++ )
		{
			cout << Array[ j ][ i ] << " ";
		}
		cout<< endl;
	}




	system("pause");
	return 0;
}





****************************************************************************

对于二维vector的定义。
定义一个行列都是变化的数组。


#include <iostream>
#include <stdlib.h>
#include <vector>
using namespace std;

//对于二维vector的定义。
//定义一个行列都是变化的数组。


int main(void)
{

	int i = 0, j = 0;
	vector< vector<int> > Array; //定义一个包含元素类型为vector<int>的vector Array
	vector< int > line;
	for( j = 0; j < 5; j++ ) // j就是行,可变
	{
		Array.push_back( line );//要对每一个vector初始化,否则不能存入元素。
		for ( i = 1; i <= 10; i++ ) //每行元素为1-10。 i是每列的数值,可变
		{
			Array[ j ].push_back( i );
		}
	}
	//vector< vector<int> >::iterator itr_array ;
	//itr_array = Array.begin();

	cout <<  "Array 行数:" << Array.size() <<endl; 

	for( j = 0; j < Array.size(); j++ )
	{
		for( i = 0; i < Array[ j ].size(); i++ )
		{
			cout << Array[ j ][ i ] << " ";
		}
		cout<< endl;
	}


	system("pause");
	return 0;
}






**************************************************************************************

c.erase(pos)             删除pos位置的数据,传回下一个数据的位置。
c.erase(beg,end) 删除[beg,end)区间的数据,传回下一个数据的位置。


#include <iostream>
#include <stdlib.h>
#include <vector>
using namespace std;

//使用 vettor erase 指定元素
//c.erase(pos)   删除pos位置的数据

//c.erase(pos)      删除pos位置的数据,传回下一个数据的位置。
//c.erase(beg,end)	删除[beg,end)区间的数据,传回下一个数据的位置。

int main(void)
{

	vector<int>  arr;
	arr.push_back(6);
	arr.push_back(8);
	arr.push_back(3);
	arr.push_back(8);

	for(vector<int>::iterator it=arr.begin(); it!=arr.end();  )
	{
		if(*it == 8)
		{
			it = arr.erase(it); c.erase(pos) 删除pos位置的数据 传回下一个数据的位置。
		}
		else
		{
			++it;
		}
	}
	cout << "After remove 8:\n";

	for(vector<int>::iterator it = arr.begin(); it < arr.end(); ++it)
	{
		cout << * it << " ";
	}
	cout << endl;


	system("pause");
	return 0;
}



*****************************************************************

返回一个vector里面的元素值


	int nSize = arr.empty() ? -1 : static_cast<int>(arr.size());
	cout << nSize << endl;


参见:



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值