您的位置:首页 > 编程语言 > C语言/C++

C++ 小记 vector 容器(二)

2015-09-10 16:25 295 查看

如何利用迭代器获取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;


参见:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: