向量 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. The 'Microsoft Jet OLEDB 4.0 Provider' is not registered on the local machine

    在一台Win7 64位的操纵系统上部署的C# Web系统,操作Excel,批量导入数据,报错,提示错误信息: The ‘Microsoft Jet OLEDB 4.0 Provider' is not ...

  2. C#实现访问网络共享文件夹

    C#实现访问网络共享文件夹,使用 WNetAddConnection2A 和 WNetCancelConnection2A. 在目标服务器建立共享文件夹,建立访问账号test; public enum ...

  3. postfix配置积累(不断的积累)

    postfix 配置 1.mail_name 默认是Postfix.在收件人信头可以查看,如果不想让别人知道你是用postfix发的,则可以改成其它名字,如:postconf -e mail_name ...

  4. Luogu 2868 [USACO07DEC]观光奶牛Sightseeing Cows

    01分数规划复习. 这东西有一个名字叫做最优比率环. 首先这个答案具有单调性,我们考虑如何检验. 设$\frac{\sum_{i = 1}^{n}F_i}{\sum_{i = 1}^{n}T_i} = ...

  5. 利用osmosis导出osm城市数据

    转载(未测试) 方法核心就是利用osmosis的导出指定功能,即是从大范围导出小范围的基本用例. 我们只需要知道我们所需要提取的城市的经纬度范围, 例如广州市的经纬度范围是北纬22.26~23.56度 ...

  6. VMWare、Ubuntu Server 18.04 共享文件夹

    背景:VMWare选项中配置了共享文件夹,装完Ubuntu Server 18.04在 /mnt/下都没有 hgfs文件夹,更别提共享文件夹了 参考:Ubuntu16.04版安装VMwareTools ...

  7. Session.Abandon-Session.Clear-Session.RemoveAll

    System.Web.UI.Page.Session属性和System.Web.HttpContext.Session属性 都是System.Web.SessionState.HttpSessionS ...

  8. android studio中使用recyclerview小白篇(四)

    经过努力,我们的recyclerview终于可以使用了,但是装配上真实的数据后,发现左边的内容太长了,如果超过一行,左边内容和右边的内容竟然重叠在一起了,好是让人心塞啊,如下图 后来发现设置左边tex ...

  9. 【C#】CLR

    CLR是如何工作的 借用维基百科上的一副图来描述CLR的运行流程: 从源代码到应用程序执行CLR主要做了以下工作: 将源代码编译成托管模块 托管模块是一个标准的 32 位 Microsoft Wind ...

  10. CentOS 进程操作

    ps -ef:查看所有进程, ps -ef |grap firewalld 查看与firewalld相关的进程 which :查看进程:which firewalld kill 进程id:杀掉进程 k ...