c++向量
来源:互联网 发布:图片剪切软件下载 编辑:程序博客网 时间:2024/05/17 07:51
内容综合整理自:http://www.cnblogs.com/mr-wid/archive/2013/01/22/2871105.html
http://blog.csdn.net/rocispeng/article/details/7958358
向量(vector)
一、接口与实现
向量:数组的抽象与泛化,由一组元素按线性次序封装而成各元素与[0,n)内的秩一一对应
元素的类型不限于基本类型
操作、管理和维护更加简化、统一与安全
可更为便捷地参加复杂数据结构的定制与实现
操作功能适用对象size()报告向量当前的规模(元素总数)向量get(r)获取秩序为r的元素向量put(r,e)用e替换秩为r元素的数值向量insert(r,e)e作为秩为r元素插入,原后继元素一次后移向量remove(r)删除秩为r的元素,返回该元素中原存放的对象向量disordered()判断所有元素是否已按非降序排列向量sort()调整各元素的位置,使之按非降序排列向量search(e)查找目标元素e,返回不大于e且秩最大的元素有序向量deduplicate()剔除重复元素向量uniquify剔除重复元素有序向量traverse遍历向量并做统一处理所有元素,处理方法由函数对象指定向量find(e)查找目标元素e向量
二、向量
vector是c++标准程序库中的一个类,可视为会自动扩展容量的数组,以循序(Sequential)的方式维护变量集合。vector的特色包括支持随即存取,在集合尾端增删元素很快,但是在集合中间增删元素比较费时。vector是c++标准程序库中的众多容器之一,除此之外还有list、set、map、...等等。vector以模板(泛型)方式实现,可以储存任何类型的变量,包括用户自定义的数据型态,例如:它可以是放置整数(int)型态的vector、也可以是放置字符串(string)型态的vector,活着放置用户自定类型(user-defined class)的vector。
vector定义于<vector>头文件中,与其他STL组建一样,vector属于std命名空间
vector是c++标准程序库里最基本的容器,大多数情况下都很有效率。vector设计之处即是为了改善C语言原生数组的种种缺失与不便,而提供一种更有效、更安全的数组。vector的使用接口可以模拟C语言原生数组,较明显的差异在于储存器管理,原生数组必须在声明数组的时候明确指定数组长度(例如 int a[5]),但是vector不需要指定,而是会在运行期依据状况自我调整长度,动态增大容量
vector的表现一如数据结构中的数组,允许随即存取,以索引值访问任一元素只要花费常数时间O(1),若在vector集合中间增加或删除元素时间复杂度是线性时间O(n),较为费时。虽然C++标准并没有规定实现方式,但大多数vector内部均使用动态数组方式实现。
有点点像Java里的arrylist有没有嘿嘿 “不*明*真*相的围*观群*众” 槑槑槑槑呆槑槑槑槑槑槑槑槑……
三、使用说明
声明
使用vector之前,必须先 #include<vector>
声明一个vector变量的方法如下:
std::vector<T>v;
T是vector要存储的对象集合的类型,该vector的变量名称是v。T可以是任何符合Assignable条件的类型,包或用户自定义类型。如果T不符合Assignment或者复制成本很高昂,可以考虑使用T*来代替T
取代数组使用:
#include <iostream>#include<vector>using namespace std;int main(){ std::vector<int> v;//T即是贴出相应的向量类型 v.push_back(1);//=======>v[o]==1 v.push_back(2); v.push_back(3); for(int i=0;i<3;i++) { std::cout<<v[i]<<std::endl; }}
vector 有四种定义方式:
1.vector<int> a(10); //定义了10个整数元素的向量,但没有给出初值,因而其值是不确定的
2.vector<int>b(10,1) //定义了10个整数元素的向量,并且给每个元素的初值赋值为1
3.vector<int>c(b) //用另一个线程的向量来创建一个向量
4.vector<int>d(b.begin(),b.begin()+3); //定义了其值依次为b向量中第0到第2个(共三个)元素的向量
长度/容量
#include <iostream>#include<cstdlib>#include<vector>#include<iomanip>#define SETW_1 10#define SETW_2 6#define SETW_3 10using namespace std;typedef vector<int> Vint;void PrintVectorInfo(Vint& v){ cout<<setw(SETW_1)<<"Element"<<setw(SETW_2)<<"Size"<<setw(SETW_3)<<"Capacity"<<endl;//setw()只是起了一个对齐的作用 //capacity容量 for(Vint::iterator it=v.begin();it !=v.end();it++)//iterator是向量中的遍历器 /* 然而现在还是不太懂下面这段代码是可以替代的么 for(int i=0;i<v.size();++i) cout<<v[i]<<" "; */ { cout<<setw(SETW_1)<<(*it)<<setw(SETW_2)<<v.size()<<setw(SETW_3)<<v.capacity()<<endl; } cout<<endl;}int main(int argc,char** argv){ //宣告一个vector Vint vint; //宣告两个整数变数 int a=11,b=22,c=33; //建立只有一个元素空间的vint //把变数a复制至第一个元素内 vint.push_back(a); cout<<"Push Back:a="<<a<<endl; //建立两个元素空间的vint //把变数a复制至第一个元素内 //把变数b复制至第二个元素内 //删除上一次建立的vint //上次建立的vint只有一个元素空间 //依此类推 vint.push_back((b)); cout<<"Push Back:b="<<b<<endl; vint.push_back(c); cout<<"Push Back:c="<<c<<endl; PrintVectorInfo(vint); //移除最后一个元素 vint.pop_back(); cout<<"Pop Back......"<<endl; PrintVectorInfo(vint); //清除所有元素 vint.clear(); cout<<"Clear All Elements."<<endl; //=END=// return 0;}
0 0
- C语言-向量基本概念
- C语言-向量基本概念
- [C++]对字符串向量排序
- Problem C: 向量的运算
- Problem C: 向量的运算
- 向量
- 向量
- 向量
- 向量
- 向量
- 向量
- 向量
- 向量
- 向量
- 向量
- 向量
- 向量
- 向量
- HashMap在多线程环境下偶然造成InfiniteLoop导致程序宕机
- 【unix网络编程第三版】阅读笔记(四):TCP客户/服务器实例
- Android 隐藏状态栏
- 整数反转算法(php实现)
- java8学习 -- lambda表达式
- c++向量
- nlp_关键词提取总结
- 练习35——分支和函数
- java.lang.UnsatisfiedLinkError: D:\Tomcat\apache-tomcat-7.0.37\bin\tcnative-1.dll: Can't load AMD 64
- 【Python学习笔记】调试
- 易语言 利用QQ感知登录提取QQ号码
- GEOGRAPHY
- Server MyEclipse Tomcat v7.0 was unable to start within 45 seconds. If the server requires more time
- 利用Navicate把SQLServer转MYSQL的方法(连数据)