向量 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的更多相关文章

  1. C++的STL中vector内存分配方法的简单探索

    STL中vector什么时候会自动分配内存,又是怎么分配的呢? 环境:Linux  CentOS 5.2 1.代码 #include <vector> #include <stdio ...

  2. 带你深入理解STL之Vector容器

    C++内置了数组的类型,在使用数组的时候,必须指定数组的长度,一旦配置了就不能改变了,通常我们的做法是:尽量配置一个大的空间,以免不够用,这样做的缺点是比较浪费空间,预估空间不当会引起很多不便. ST ...

  3. C++STL之Vector向量详解,用法和例子 一起学习 一起加油

                                                                                    C++ STL之vector用法总结 1 ...

  4. STL中vector、list、deque和map的区别

    1 vector     向量 相当于一个数组    在内存中分配一块连续的内存空间进行存储.支持不指定vector大小的存储.STL内部实现时,首先分配一个非常大的内存空间预备进行存储,即capac ...

  5. 【转】STL中vector、list、deque和map的区别

    1.vector 向量 相当于一个数组 在内存中分配一块连续的内容空间进行存储.支持不指定vector大小的存储.STL内部实现时,首先分配一个非常大的内存空间预备进行存储,即capacity()函数 ...

  6. C++-STL:vector用法总结

    目录 简介 用法 1. 头文件 2. vector的声明及初始化 3. vector基本操作 简介 vector,是同一类型的对象的集合,这一集合可看作可变大小的数组,是顺序容器的一种.相比于数组,应 ...

  7. 从零开始写STL—容器—vector

    从0开始写STL-容器-vector vector又称为动态数组,那么动态体现在哪里?vector和一般的数组又有什么区别?vector中各个函数的实现原理是怎样的,我们怎样使用会更高效? 以上内容我 ...

  8. 【C++】STL,vector容器操作

    C++内置的数组支持容器的机制,但是它不支持容器抽象的语义.要解决此问题我们自己实现这样的类.在标准C++中,用容器向量(vector)实现.容器向量也是一个类模板.标准库vector类型使用需要的头 ...

  9. STL之vector常用函数笔记

    STL之vector常用函数笔记 学会一些常用的vector就足够去刷acm的题了 ps:for(auto x:b) cout<<x<<" ";是基于范围的 ...

  10. [转]STL中vector转数组(实际是数组的指针)

    感谢:http://topic.csdn.net/t/20050429/20/3976956.html 感谢:http://yzyanchao.blogbus.com/logs/47796444.ht ...

随机推荐

  1. keepalived配置

    keepalived配置 之前已经安装完成,接下来我们配置keepalived. 假设我的ip地址如下: server1:192.168.0.150 server2:192.168.0.157 vip ...

  2. quilljs 一款简单轻量的富文本编辑器(适合移动端)

    quilljs入门使用教程: quill.js是一款强大的现代富文本编辑器插件.该富文本编辑器插件支持所有的现代浏览器.平板电脑和手机.它提供了文本编辑器的所有功能,并为开发者提供大量的配置参数和方法 ...

  3. JS获得css样式即获得元素的计算样式(《Javascript精粹修订版》书摘)

    为HTML文档中的元素指定样式可以有3种方法:使用内嵌样式.在页面的head中对Style进行声明以及外部 CSS 文件.元素的视觉效果往往是由上述3种方式的结合或者其中某一种方式来确定的,但是内嵌样 ...

  4. integer encoding vs 1-hot (py)

    https://github.com/szilard/benchm-ml/issues/1 glouppe commented on 7 May 2015 Thanks for the benchma ...

  5. Python 面向对象class(2)

    Python 面向对象 Python从设计之初就已经是一门面向对象的语言,正因为如此,在Python中创建一个类和对象是很容易的.本章节我们将详细介绍Python的面向对象编程. 如果你以前没有接触过 ...

  6. 函数有一个特殊的属性 prototype!

    JavaScript 中只有对象,没有类. 实际上,JavaScript 才是真正应该被称为「面向对象」的语言,因为它是少有的可以不通过类,直接创建对象的语言. 函数的 prototype 属性 在 ...

  7. web大文件上传控件-监控f_create流程-Xproer.HttpUploader6

    监控f_create流程 1.打开ie,f12 2.启动网络监控 点击开始捕获 上传文件,然后查看监控 将监控信息转到详细视图 向f_create提交的数据 f_create返回值

  8. struct stat中的mode_t

    mode_t是无符号整形.它由 S_IRUSR S_IWUSR S_IXUSR S_IRGRP S_IWGRP S_IXGRP S_IROTH S_IWOTH S_IXOTH几个按位或而的来:所得到的 ...

  9. Redis 占用Windows系统盘空间23G

    Redis常出现问题总结: 1.当出现修改--maxheap and --heapdir 在启动这两个版本时都会创建一个 RedisQFork.dat文件,我不确定 RedisQFork 文件是否变小 ...

  10. .net在线HTML编辑器

    //在线网页编辑器, <script> var editor2 = new baidu.editor.ui.Editor({//实例化编辑器 initialContent: '', min ...