向量 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. 面试题:try,catch,finally都有return语句时执行哪个 已看1

    1.不管有木有出现异常,finally块中代码都会执行: return 先执行 把值临时存储起来, 执行完finally之后再取出来 值是不会改变的2.当try和catch中有return时,fina ...

  2. 学习PDO啦

    通过查找资料对PDO有了一定的了解,PDO(PHP Data Object )为PHP数据对象,为PHP访问数据库提供了一个轻量级的借口,但PDO本生不能实现访问数据库的任何功能,只能通过数据库的PD ...

  3. Shiro——概述

    Apache Shiro 是 Java 的一个安全(权限)框架. Shiro 可以非常容易的开发出足够好的应用,其不仅可以用在JavaSE 环境,也可以用在 JavaEE 环境. Shiro 可以完成 ...

  4. Unity3D面试题整合

    第一部分 1. 请简述值类型与引用类型的区别答:区别:1.值类型存储在内存栈中,引用类型数据存储在内存堆中,而内存单元中存放的是堆中存放的地址.2.值类型存取快,引用类型存取慢.3.值类型表示实际数据 ...

  5. LibreOJ 6283 数列分块入门 7(区间加区间乘区间求和)

    题解:这道题要打一个乘标记一个加标记,两个标记的优先级是乘法高,所以在乘的时候要将加标记同时乘上一个c,当然,对于每个非完整块一定要记得暴力重构整个块,把加标记和乘标记都初始化. 代码如下: #inc ...

  6. C# Socket 发送&接收&返回

    因为工作比较忙,好久没有写过博客了,最近因项目需求,需要用到Socket来进行通信,简单写了几个例子,记录一下,代码很简单,无非就是接收与发送,以及接收到数据后返回一个自定义信息,也可以说是发送. 先 ...

  7. 21天学通C++学习笔记(四):数组和字符串

    1. 数组 概念 是一组元素 这些元素是相同的数据类型 按顺序存储到内存中 目的是避免在业务需要时去重复声明很多同类型的变量 初始化 分别初始化:int i [5] = {1,2,3,4,5}; 全部 ...

  8. 利用find同时查找多种类型文件

    find . -name "*.c" -o -name "*.cpp" -o -name "*.h" 就可以列出当前目录下面所有的c,cpp ...

  9. CH收藏的书

    论语 道德经 墨子

  10. 「CF622F」The Sum of the k-th Powers「拉格朗日插值」

    题意 求\(\sum_{i=1}^n i^k\),\(n \leq 10^9,k \leq 10^6\) 题解 观察可得答案是一个\(k+1\)次多项式,我们找\(k+2\)个值带进去然后拉格朗日插值 ...