C++中vector类的笔记
来源:互联网 发布:网络准入控制 编辑:程序博客网 时间:2024/06/10 01:52
关于C++中的vector的一些学习记录
vector是C++中的一个数据结构,确切的说是一个类,相当于动态数组,当编程的时候无法知道自己需要多大的数组规模的时候可以使用vector节约空间和节省代码的作用(我理解vector无法实现节约时间的作用,因为极有可能是类似于C语言中的单链表的方式来实现的,那么就会存在申请内存的时间,肯定会消耗比单纯一次性申请足量的数组使用的时间要长)。
用法
- 使用的时候首先需要包含vector头文件:
#include<vector>
- 还需要加上
using namespace std;
因为是命名空间std中的类。
声明方式
vector<元素数据类型> 变量名;
- vector<int> a;
声明了一个int
数组a[];
,但是长度动态变化,可以向里面增加或者删除int
元素;
- vector<char> a;
声明了一个char
数组a[];
,但是长度动态变化,可以向里面增加或者删除char
元素;
- 使用vector代替二维数组。只是需要声明一个一位数组向量即可,而一个数组的名字其实代表的就是他的首地址,所以只是需要声明一个地址的向量即可:vector<int*> a;
,三维的表示方法则是vector<int**> a;
vector中常用的操作函数包含(有一些没有写到是暂时没有使用到过,以后会补充):
a.push_back();//在尾部增加一个数据
a.pop_back();//删除最后一个数据
a.at(idx);//传回指向索引idx的数据,如果idx越界,则抛出out_of_range
a.begin();//返回指向容器第一个元素的迭代器,是个地址
a.end()();//返回指向容器末端元素的下一个,是个地址,指向一个不存在的元素
a.front();//传回第一个数据
a.back();//传回最后一个数据,不检查该数据是否存在
a.max_size();//返回容器中最大数据的数量
a.capacity();
a.size();//返回容器中的元素个数
a.resize();//重新制定队列的长度
a.reserve();//保留适当的容量
a.erase(pos);//删除pos位置的元素,传回下一个数据的位置
a.erase(beg,end);//删除位置beg到位置end的数据,传回下一个数据的位置
a.clear();//移出容器中所有的数据
a.rbegin();//传回一个逆向队列的第一个数据
a.rend();//传回一个逆向队列的最后一个数据的下一个位置
a.empty();//判断容器是否为空
a.swap(b);//将a和b元素进行互换也可以通过swap(a,b);实现
a.assign();
a.shrink_to_fit();
a.crbegin();
a.crend();
a.cbegin();
a.cend();
a.emplace();
a.data();
a.insert(pos,elem);//在pos位置插入一个元素elem,传回新数据位置
a.insert(pos,n,elem);//在pos位置插入n个elem数据,无返回值
a.insert(pos,beg,end);//在pos位置处插入位置beg到位置end之间的数据,无返回值
a.emplace_back();
再次把之前联想回文数那道题目的vector方法贴上来,顺便自己再琢磨琢磨vector实现二维数组的方法与要点:
#include<iostream>#include<vector>using namespace std;bool isPalindrome(int x){ vector<int> eve; int i; cout<<"input num is "<<x<<endl; while(x/10 >= 1) { eve.push_back(x % 10); x = x / 10; } eve.push_back(x); int len = eve.size(); for(i = 0;i <= (len /2);i++) { int tmp1 = eve.at(i); int tmp2 = eve.at(len - i - 1); cout<<tmp1<<" and "<<tmp2<<endl; if(tmp1 != tmp2) { return false; } } return true;}void main(void){ int x; cin>>x; while(x<0) { cout<<"input must larger than or equal to 0!"<<endl; cin>>x; } cout<<isPalindrome(x)<<endl; system("pause");}
- C++中vector类的笔记
- C++STL中vector容器类的简单操作
- C++vector学习笔记
- 【C++】vector容器和list容器中使用单个迭代器的erase函数学习笔记
- C++中vector的用法
- C++中vector的用法
- C++STL中vector容器的用法
- C++STL中vector容器的用法
- C++STL中vector容器的用法
- C++STL中vector容器的用法
- C++STL中vector容器的用法
- C++STL中vector容器的用法
- C++STL中vector的使用
- C++STL中vector容器的用法
- C++STL中vector容器的用法
- vector类方面的笔记
- C++(笔记)浅析vector容器的实例
- C++----Vector的使用
- android学习目录
- ASP.NET中的inherits、CodeFile、CodeBehind的区别详解
- 递归画图形
- 正则表达式
- ajax+struts2无刷新判断用户名密码是否相匹配
- C++中vector类的笔记
- C#读取文本文件和C# 写文本文件
- 第5课 Android四大组件之一——Activity知识汇总
- mysql优化之二(SQL语句优化)
- hdu5514容斥原理和群论
- 内排序和外排序的理解
- jquery 点击元素以外任意地方隐藏该元素的方法(事件冒泡)
- 冒泡排序和插入算法
- kobject与kset