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