C++STL之vector
2015-10-09 17:24
399 查看
vector容器可以像数组那样进行随机的访问,还可以在尾部进行插入元素,是一种简单高效的容器,完全可以替换掉数组。
vector具有内存自动管理的功能,对于元素的插入和删除,可以动态的整理所占用的内存空间。
vector容器的下标也是从0开始计数的。
vector容器的定义:
1. 可以事先固定大小,事后可以随时间调整大小。
2. 事先不定义,随时使用push.back()方法从尾部扩张元素
3. 使用insert()在某个元素位置前插入新元素。
vector容器有两个重要的方法:
1. begin() 返回的是首元素位置的迭代器
2. end() 返回的是最后一个元素的下一个元素位置的迭代器
* 创建vector对象
1. 不指定容器的元素个数
2. 指定元素个数
下标是0-9,并且每个元素默认初始值为0
3.指定元素个数,并且为每个元素赋初始值
*下标方式访问vector元素,用迭代器访问vector元素
常使用迭代器配合循环语句来对vector对象进行遍历访问,迭代器的类型一定要与它要遍历的vector对象的元素类型一致
*元素的插入
insert()方法可以在vector对象的任意位置前插入一个新的元素,同时,vector自动扩张一个元素空间 ,插入位置后的所有元素依次向后挪动一个位置,
insert()方法要求插入的位置,是元素的迭代器位置,而不是元素的下标。
*元素的删除
erase()方法可以删除vector中迭代器所指的一个元素或一段区间中的所有元素。
clear()方法则一次性删除vector中的所有元素
*使用reverse()反向排列算法
reverse()反向排列算法,需要头文件#include<algorithm>
reverse()算法可将向量中某段迭代器区间元素反向排列
*使用sort()算法对向量元素进行排序
使用sort()算法,需要申明#include<algorithm>
sort算法要求使用随机访问迭代器进行排序,在默认情况下,对向量元素进行升序排列。
还可以自己设计排序比较函数,然后,吧这个函数指定给sort算法,sort就根据这个比较函数指定的排序规则进行排序,设计一个排序比较函数cmp
*向量的大小
使用size()方法可以返回向量的大小,即向量元素的个数
使用empty()方法返回向量是否为空。
vector具有内存自动管理的功能,对于元素的插入和删除,可以动态的整理所占用的内存空间。
vector容器的下标也是从0开始计数的。
vector容器的定义:
1. 可以事先固定大小,事后可以随时间调整大小。
2. 事先不定义,随时使用push.back()方法从尾部扩张元素
3. 使用insert()在某个元素位置前插入新元素。
vector容器有两个重要的方法:
1. begin() 返回的是首元素位置的迭代器
2. end() 返回的是最后一个元素的下一个元素位置的迭代器
* 创建vector对象
1. 不指定容器的元素个数
vector<int> v;
2. 指定元素个数
下标是0-9,并且每个元素默认初始值为0
vector<double> v(10);
3.指定元素个数,并且为每个元素赋初始值
vector<double> v(10, 8.6);
*下标方式访问vector元素,用迭代器访问vector元素
常使用迭代器配合循环语句来对vector对象进行遍历访问,迭代器的类型一定要与它要遍历的vector对象的元素类型一致
#include<iostream> #include<vector> using namespace std; int main() { vector<int> v(3); //通过下标访问 v[0] = 2; v[1] = 7; v[2] = 9; vector<int>::iterator it;//定义迭代器变量 for(it = v.begin(); it != v.end(); it ++) cout<<*it<<" "; cout<<endl; return 0; }
*元素的插入
insert()方法可以在vector对象的任意位置前插入一个新的元素,同时,vector自动扩张一个元素空间 ,插入位置后的所有元素依次向后挪动一个位置,
insert()方法要求插入的位置,是元素的迭代器位置,而不是元素的下标。
#include<iostream> #include<vector> using namespace std; int main() { vector<int> v(3); v[0] = 2; v[1] = 7; v[2] = 9; //在最前面插入新元素,新元素值为8 v.insert(v.begin(), 8); //在第2个元素前插入新元素1,vector从0开始计数 v.insert(v.begin()+2, 1); vector<int>::iterator it; for(it = v.begin(); it != v.end(); it ++) cout<<*it<<" "; cout<<endl; return 0; }
*元素的删除
erase()方法可以删除vector中迭代器所指的一个元素或一段区间中的所有元素。
clear()方法则一次性删除vector中的所有元素
#include<iostream> #include<vector> using namespace std; int main() { vector<int> v(10); for(int i = 0; i < 10; i ++) v[i] = i; //删除第2个元素,从0开始计数 v.erase(v.begin()+2); vector<int>::iterator it; for(it = v.begin(); it != v.end(); it ++) cout<<*it<<" "; cout<<endl; //删除迭代器第1个到第5个区间的所有元素 v.erase(v.begin()+1, v.begin()+5); for(it = v.begin(); it != v.end(); it ++) cout<<*it<<" "; cout<<endl; //清空向量 v.clear(); cout<<v.size()<<endl; return 0; }
*使用reverse()反向排列算法
reverse()反向排列算法,需要头文件#include<algorithm>
reverse()算法可将向量中某段迭代器区间元素反向排列
#include<iostream> #include<vector> #include<algorithm> using namespace std; int main() { vector<int> v(10); for(int i = 0; i < 10; i ++) v[i] = i; //反向排列向量从头到尾的元素 reverse(v.begin(), v.end()); vector<int>::iterator it; for(it = v.begin(); it != v.end(); it ++) cout<<*it<<" "; cout<<endl; //反向排列向量前5个元素 reverse(v.begin(), v.begin()+5); for(it = v.begin(); it != v.end(); it ++) cout<<*it<<" "; cout<<endl; return 0; }
*使用sort()算法对向量元素进行排序
使用sort()算法,需要申明#include<algorithm>
sort算法要求使用随机访问迭代器进行排序,在默认情况下,对向量元素进行升序排列。
#include<iostream> #include<vector> #include<algorithm> using namespace std; int main() { vector<int> v; for(int i = 0; i < 10; i ++) v.push_back(9-i); //输出排序前 for(int i = 0; i < 10; i ++) cout<<v[i]<<" "; cout<<endl; //排序 升序排序 sort(v.begin(), v.end()); for(int i = 0; i < 10; i ++) cout<<v[i]<<" "; cout<<endl; return 0; }
还可以自己设计排序比较函数,然后,吧这个函数指定给sort算法,sort就根据这个比较函数指定的排序规则进行排序,设计一个排序比较函数cmp
#include<iostream> #include<vector> #include<algorithm> using namespace std; //自行设计排序比较函数:对元素进行降序排列 bool cmp(const int &a, const int &b) { if(a != b) return a > b; else return a > b; } int main() { vector<int> v; for(int i = 0; i < 10; i ++) v.push_back(i); //输出排序前 for(int i = 0; i < 10; i ++) cout<<v[i]<<" "; cout<<endl; //排序 升序排序 sort(v.begin(), v.end(), cmp); for(int i = 0; i < 10; i ++) cout<<v[i]<<" "; cout<<endl; return 0; }
*向量的大小
使用size()方法可以返回向量的大小,即向量元素的个数
使用empty()方法返回向量是否为空。
相关文章推荐
- C语言经典笔试题(一)
- c++笔试
- 【C语言】输出字符串
- Python3.4与c/c++联调----ctypes
- libxml2编程--C语言xml初使用(2)
- libxml2编程--C语言xml初使用(2)
- libxml2编程--C语言xml初使用(2)
- C++STL之组件
- C++11 std::bind与std::function
- Cppcheck 相关信息整理
- libxml2编程--C语言xml初使用(1)
- libxml2编程--C语言xml初使用(1)
- libxml2编程--C语言xml初使用(1)
- C++关于文本文件的读写问题
- C++调用C函数
- C语言位运算符
- C++向量
- iOS开发--OC篇--OC语言简介
- C++ How to program 9E<10.9 hugeInt Class 函数运算符重载>
- Java的List模板类型与C++的list模板类型的比较