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;
参见:
相关文章推荐
- C和C++中typedef struct的区别
- C++map的用法
- C语言的整型溢出问题
- <<C++编程思想 第2卷>>读后感
- stl_set
- C++中双冒号(::)和冒号(:)的用法
- c++ --> typedef用法总结
- C++类的私有继承
- c++用法的学习心得
- c++用法的学习心得
- 深入解析C++中的函数模板和函数的默认参数
- [iOS学习]C语言-04-程序循环结构-do…while循环解说
- 深入理解C++枚举类型enum
- 黑马程序员——C语言笔记之指针
- Ubuntu下编译C/C++文件
- [C/C++]_[初级]_[替换过滤utf8字符串里无效字符]
- C/C++中const关键字详解
- [C/C++]_[初级]_[替换过滤utf8字符串里无效字符]
- C语言指针学习
- 详解C++中的内联函数和函数重载