vector中函数的使用
2016-07-20 11:50
405 查看
容器(container):可容纳一些数据的模板类,STL中有vector、set、map、multimap和deque等容器。
游标(iterator):是一个指针,用来指向STL容器中的元素。
vector是一个能够操作多种数据类型和算法的模板类和函数库,是C++标准模板库中的部分内容
vector被认为是一个容器,能够像容器一样存放任意类型的动态数组
头文件为:
vector属于std命名域的,使用全局的命名域方式:
等价于
vector的声明
vector容器中常用的函数,c是一个容器对象
容器对象c
c.begin()是一个指针,指向内存中的值为2,注意c.end()指向内存中的值不是88;
c.rbegin();//将vector反转后的开始指针返回(其实就是原来的end-1)
c.rend();//将vector反转后的结束指针返回(其实就是原来的begin-1)
resize()可改变size,可能改变capacity。如果改变后的size比当前capacity大,则capacity会变大,同时构造出多出来的对象,反之,capacity不变,同时析构一些不再需要的对象;
reserve()和resize()都不会使capacity变小,但都有可能使capacity变大,reserve()能准确控制capacity,而resize()不能,vc里是每次增大一半的当前capacity。如果不去使用reserve()和resize(),每当capacity不够时,就会去分配一块新的够大的内存,再释放以前的内存,因此效率很低。
数据的输入与删除
元素的访问
排序和查询
二维容器
游标(iterator):是一个指针,用来指向STL容器中的元素。
vector是一个能够操作多种数据类型和算法的模板类和函数库,是C++标准模板库中的部分内容
vector被认为是一个容器,能够像容器一样存放任意类型的动态数组
头文件为:
#include <vector>
vector属于std命名域的,使用全局的命名域方式:
using namespace std; vector<int> v;
等价于
std::vector<int> v;
vector的声明
vector<ElemType> c;//创建一个空的vector vector<ElemType> c1(c2);//创建一个vector c1,并用c2初始化c1 vector<ElemType> c(n);//创建一个含有n个ElemType类型数据的vector vector<ElemType> c(n,elem);//创建一个含有n个ElemType类型数据的vector,并全部初始化为elem c.~vector<ElemType>();//销毁所有数据,释放资源
vector容器中常用的函数,c是一个容器对象
容器对象c
下标 | 值 |
---|---|
0 | 11 |
1 | 45 |
2 | 13 |
3 | 88 |
c.push_back(elem);//在容器最后位置添加一个元素elem c.pop_back();//删除容器最后位置处的元素 c.at(index);//返回指定index位置处的元素 c.begin();//返回指向容器最开始位置数据的指针 c.end();//返回指向容器最后一个数据单元的指针+1 c.front();//返回容器最开始单元数据的引用 c.max_size();//返回容器的最大容量 c.size();//返回当前容器中实际存放元素的个数,同c.capacity() c.erase(p);//删除指针p指向位置的数据,返回指向下一个位置的指针 c.clear();//清除所有数据,capacity保持不变,size变成0 c.empty();//判断容器是否为空,若为空返回true,否则返回false c1.swap(c2);//交换两个容器中的数据,两个容器的size一定相等,capacity可以不等 c.insert(p,elem);//在指针p指向的位置插入数据elem,返回指向elem位置的指针 c.insert(p,n,elem);//在指针p指向的位置插入n个elem数据,无返回值 c.insert(p,begin,end); //在位置p插入在区间[begin,end)的数据,无返回值
c.rbegin();//将vector反转后的开始指针返回(其实就是原来的end-1)
c.rend();//将vector反转后的结束指针返回(其实就是原来的begin-1)
insert()函数的使用
#include<vector> #include<iostream> #include <stdlib.h> using namespace std; int main() { vector<int> v; v.push_back(10); v.push_back(20); v.push_back(30); v.insert(v.begin(), 8);//在下标为0的元素前面插入新元素 v.insert(v.begin() + 2, 40);//在下标为2的元素前面插入新元素 v.insert(v.end(), 50);//在向量末尾追加新元素 /********遍历容器内的值***********/ vector<int>::iterator it; for (it = v.begin(); it != v.end(); it++) { cout << *it << " "; } //----------------------------------/ system("pause"); return 0; }
reserve()和resize()的区别
reserve()可改变capacity,不改变size,可分配内存,不会构造出对象;如果改变后的capacity比当前capacity大,则capacity会变大,反之,capacity不变;resize()可改变size,可能改变capacity。如果改变后的size比当前capacity大,则capacity会变大,同时构造出多出来的对象,反之,capacity不变,同时析构一些不再需要的对象;
reserve()和resize()都不会使capacity变小,但都有可能使capacity变大,reserve()能准确控制capacity,而resize()不能,vc里是每次增大一半的当前capacity。如果不去使用reserve()和resize(),每当capacity不够时,就会去分配一块新的够大的内存,再释放以前的内存,因此效率很低。
vector中的操作
c.[i];同at()函数的作用相同,即取容器中的数据;数据的输入与删除
#include<vector> #include<iostream> #include <stdlib.h> using namespace std; int main() { int i, n; vector<int> v; for (i = 0; i < 5; i++) { scanf_s("%d", &n); v.push_back(n);//push_back(n)将元素添加到数组最后 } for (i = 0; i < v.size(); i++) { printf("%d ", v[i]); } printf("\n"); v.pop_back();//pop_back()将数组最后一个元素删除 for (i = 0; i < v.size(); i++) { printf("%d ", v[i]); } printf("\n"); system("pause"); return 0; }
元素的访问
#include<vector> #include<iostream> #include<stdlib.h> using namespace std; int main() { int i, n; vector<int> v; vector<int>::iterator it;//声明一个vector的迭代器 for (i = 0; i < 10; i++) { scanf_s("%d", &n); v.push_back(n); } for (i = 0; i < v.size(); i++) { printf("%d ", v[i]);//第一种方法,访问通过操作[] } printf("\n"); for (i = 0; i < v.size(); i++) { printf("%d ", v.at(i));//第二种方法,通过at(index)函数 } printf("\n"); for (it = v.begin(); it != v.end(); it++) { printf("%d ", *it);//第三种方法,通过迭代器iterator访问 } printf("\n"); system("pause"); return 0; }
排序和查询
#include<vector> #include<iostream> #include<algorithm> #include<stdlib.h> using namespace std; int main() { int i, n; vector<int> v; vector<int>::iterator it;//声明一个vector的迭代器 for (i = 0; i < 10; i++) { scanf_s("%d", &n); v.push_back(n); } it = find(v.begin(), v.end(), 3);//进行查找元素3 if (v.end() == it) {//若无该元素,则返回指向容器最后一个单元+1的指针 printf("该元素不存在于容器中!\n"); } else { printf("%d\n", it - v.begin()); } sort(v.begin(), v.end());//升序进行排序,开始位置到结束位置数值依次增大 reverse(v.begin(), v.end());//降序进行排序,开始位置到结束位置数值依次减小 system("pause"); return 0; }
二维容器
#include<vector> #include<iostream> using namespace std; int main() { int i, j,m; vector< vector<int> > v; vector<int> v1; for (i = 0; i < 4; i++) { //使用二维容器之前一定要对其进行初始化否则会出错 v.push_back(v1); } for (i = 0; i < 4; i++) { for (j = 0; j < 4; j++) { scanf_s("%d", &m); v[i].push_back(m); } } printf("%d\n", v.size()); for (i = 0; i < v.size(); i++) { for (j = 0; j < v[i].size(); j++) { printf("%d ", v[i][j]); } printf("\n"); } system("pause"); return 0; }
相关文章推荐
- 浅析STL中的常用算法
- STL区间成员函数及区间算法总结
- C++ Vector用法详解
- 详解C++编程中的vector类容器用法
- 详解C++中的vector容器及用迭代器访问vector的方法
- C++实现 vector 的四则运算
- c++ STL容器总结之:vertor与list的应用
- C++在成员函数中使用STL的find_if函数实例
- 大家注意vector, list, set, map成员函数erase
- java中vector与hashtable操作实例分享
- C++ vector删除符合条件的元素示例分享
- 关于STL中list容器的一些总结
- C++中vector容器的常用操作方法实例总结
- 使用C语言实现vector动态数组的实例分享
- C++ Vector用法深入剖析
- vector与map的erase()函数详细解析
- 关于STL中的map容器的一些总结
- 深入理解C++中的vector类的用法及特性
- vector,map,list,queue的区别详细解析
- C++ vector的用法小结