C++ STL之Vector
向量 vector 是一种对象实体, 能够容纳许多其他类型相同的元素, 因此又被称为容器。
vector 属于STL(Standard Template Library, 标准模板库)中的一种自定义的数据类型, 可以广义上认为是数组的增强版。
vector是C++用于数组类的容器,它可以被近似的认为是一个自动增长的动态数组
1.基本操作
1)头文件 #include<vector>
2) 创建和初始化
vector<int> a ; //声明一个int型向量a
vector<int> a() ; //声明一个初始大小为10的向量
vector<int> a(, ) ; //声明一个初始大小为10且初始值都为1的向量
vector<int> b(a) ; //声明并用向量a初始化向量b
vector<int> b(a.begin(), a.begin()+) ; //将a向量中从第0个到第2个(共3个)作为向量b的初始值
还可以用数组直接初始化向量
int n[] = {, , , , } ;
vector<int> a(n, n+) ; //将数组n的前5个元素作为向量a的初值
vector<int> a(&n[], &n[]) ; //将n[1] - n[4]范围内的元素作为向量a的初值
3) 插入元素
尾部插入:
v.push_back(5); //将数字5插入到v的尾部
对于定长的数组 可以使用下标输入元素
vector<int> v[];
for(int i = ; i < ; i++){
v[i] = i;
}
用insert插入元素:
v.insert(v.begin()+i,a) //在第i+1个元素前面插入a
v.insert(v.begin(), , ) ; //将1000分别插入到向量元素位置的0-2处(共3个元素)
vector<int> a(, ) ;
vector<int> b() ;
b.insert(b.begin(), a.begin(), a.end()) ; //将a.begin(), a.end()之间的全部元素插入到b.begin()前
4)访问元素
可以直接用下标访问:
for(int i = ; i < ; i++){
v[i] = i;
}
使用迭代器访问元素
for(it = v.begin(); it != end(); it++){
cout << *it << endl;
}
5)删除元素:
v.erase(v.begin()+) //删除第三个元素
v.erase(v.begin()+i,v.end()+j) //删除区间[i,j-1],从区间0开始计算
6)数组大小(数组存储的个数)
v.size()
7) 清空整个数组
v.clear();
8)交换 swap
v1.swap(v2);
9) 复制
vector<int> v1;
v1.push_back();
v2 = v1;
10)比较 保持 ==、!=、>、>=、<、<= 的惯有含义 ;
如: a == b ; //a向量与b向量比较, 相等则返回1
2.vector 元素类型
1)可以是基础元素类型,int,double,float,还可以是自定义的结构体
#include<iostream>
#include<vector>
using namespace std; struct Student{
char name[];
int age;
}; int main(){
vector<Student> v;
Student stu;
stu.name = "wangtianshui";
stu.age = ;
v.push_back(stu);
vector<int>:: iterator it = begin(); cout << (*it).name << (it*).age << endl;
return ;
}
2)二维数组
vector<int,vector<int> > v;
3)还可以可以是string类型,以及和string组成二位字符串数组(在某些PAT习题中有体现)
4)结构体里的字符串也可以是string定义的。
3.算法
算法的头文件是#include<algorithm>
1) 配合sort进行排序
sort(v.begin(),v.end()); //sort默认从小到大
可以重定义比较函数
bool cmp(const int a, const int b){
return a>b;
}
sort(v.begin(),v.end(),cmp);//调用后数组中元素就是从大到小排序了
2)reverse()
reverse(v.begin(),v.end());//此后的数组元素就被翻转过来了
3)结构体重载比较
struct Student{
int score;
int age;
//按照分数降序,年龄升序排列
bool operator<(const Student &a) const{
if(score != a.score) return score > a.score;
else return age < a.age;
}
}stu;
int main(){
vector<Student> stu;
for(int i = ; i < n; i++){
cin >> stu[i]].score >> stu[i].age;
}
vector<Student>:: iterator t;
for(t = stu.begin(); it != stu.end(); it++){
cout <<(*t).score << (*t).age << endl;
}
------------------------------------------------------------------------------------
先整理这些,以后遇到不同的用法再补充
C++ STL之Vector的更多相关文章
- C++的STL中vector内存分配方法的简单探索
STL中vector什么时候会自动分配内存,又是怎么分配的呢? 环境:Linux CentOS 5.2 1.代码 #include <vector> #include <stdio ...
- 带你深入理解STL之Vector容器
C++内置了数组的类型,在使用数组的时候,必须指定数组的长度,一旦配置了就不能改变了,通常我们的做法是:尽量配置一个大的空间,以免不够用,这样做的缺点是比较浪费空间,预估空间不当会引起很多不便. ST ...
- C++STL之Vector向量详解,用法和例子 一起学习 一起加油
C++ STL之vector用法总结 1 ...
- STL中vector、list、deque和map的区别
1 vector 向量 相当于一个数组 在内存中分配一块连续的内存空间进行存储.支持不指定vector大小的存储.STL内部实现时,首先分配一个非常大的内存空间预备进行存储,即capac ...
- 【转】STL中vector、list、deque和map的区别
1.vector 向量 相当于一个数组 在内存中分配一块连续的内容空间进行存储.支持不指定vector大小的存储.STL内部实现时,首先分配一个非常大的内存空间预备进行存储,即capacity()函数 ...
- C++-STL:vector用法总结
目录 简介 用法 1. 头文件 2. vector的声明及初始化 3. vector基本操作 简介 vector,是同一类型的对象的集合,这一集合可看作可变大小的数组,是顺序容器的一种.相比于数组,应 ...
- 从零开始写STL—容器—vector
从0开始写STL-容器-vector vector又称为动态数组,那么动态体现在哪里?vector和一般的数组又有什么区别?vector中各个函数的实现原理是怎样的,我们怎样使用会更高效? 以上内容我 ...
- 【C++】STL,vector容器操作
C++内置的数组支持容器的机制,但是它不支持容器抽象的语义.要解决此问题我们自己实现这样的类.在标准C++中,用容器向量(vector)实现.容器向量也是一个类模板.标准库vector类型使用需要的头 ...
- STL之vector常用函数笔记
STL之vector常用函数笔记 学会一些常用的vector就足够去刷acm的题了 ps:for(auto x:b) cout<<x<<" ";是基于范围的 ...
- [转]STL中vector转数组(实际是数组的指针)
感谢:http://topic.csdn.net/t/20050429/20/3976956.html 感谢:http://yzyanchao.blogbus.com/logs/47796444.ht ...
随机推荐
- GridView删除行
在GridView绑定数据的时候需要设置该GridView的主键值,设置的这个主键与取出来的数据的一个字段对应.比如,取出来的数据表中有个ID的字段,那设这个ID为该GridView的主键是比较好的. ...
- Reading——The Non-Designer's Design Book
看这本书的时候真的好恨没有CS7在手><,不然我百度几张图来模拟下,体验下设计的快感. 人们总是很容易注意到在他们潜意识里存在的东西,比如说这个图: 我们很容易联想到微信,但是3 ...
- 解决IE与FF 中 input focus 光标移动在最后的方案
只要把input元素的id传进来即可 function moveCursor(id) { var id = document.getElementById(id); id.focus(); var ...
- VC解决方案,项目,开发一段时间启动调试很慢,半天才开始链接
笔者这两天写代码过程中,发现自己解决方案下的程序启动调试,半天才开始加载相关的各种库.导致调试的时候很是郁闷 开始以为是项目关联的工程太多导致,但是在相同的解决方案sln下面,新建一个简单的控制台程序 ...
- Java 正则表达式的实际应用
正则表达式最详细-----> | |目录 1匹配验证-验证Email是否正确 2在字符串中查询字符或者字符串 3常用正则表达式 4正则表达式语法 1匹配验证-验证Email是否正确 public ...
- How do I create a .pyc file?
Python automatically compiles your script to compiled code, so called byte code, before running it. ...
- 转Delphi中XLSReadWrite控件的使用(3) 读和写Excel
unit OpExcell; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Fo ...
- .net List<T>
List的几个方法 List=>List.Find()List.FindAll()List.Contains() List.ForEach()List.ConvertAll() 1. 先比较Fi ...
- .NET Core Api 集成 swagger
废话不多讲 第一步 当然是要通过 NuGet 安装第三方插件 swagger 程序包管理器控制台,安装命令:Install-Package Swashbuckle.AspNetCore -Pre 第 ...
- CHNetRequest网络请求
Paste JSON as Code • quicktype 软件的使用 iOS开发:官方自带的JSON使用 JSON 数据解析 XML 数据解析 Plist 数据解析 NetRequest 网络数据 ...