学习C++ -> 向量(vector)
一、向量的介绍
向量 vector 是一种对象实体, 能够容纳许多其他类型相同的元素, 因此又被称为容器。 与string相同, vector 同属于STL(Standard Template Library, 标准模板库)中的一种自定义的数据类型, 可以广义上认为是数组的增强版。
在使用它时, 需要包含头文件 vector, #include<vector>
vector 容器与数组相比其优点在于它能够根据需要随时自动调整自身的大小以便容下所要放入的元素。此外, vector 也提供了许多的方法来对自身进行操作。
二、向量的声明及初始化
vector 型变量的声明以及初始化的形式也有许多, 常用的有以下几种形式:

vector<int> a ; //声明一个int型向量a
vector<int> a(10) ; //声明一个初始大小为10的向量
vector<int> a(10, 1) ; //声明一个初始大小为10且初始值都为1的向量
vector<int> b(a) ; //声明并用向量a初始化向量b
vector<int> b(a.begin(), a.begin()+3) ; //将a向量中从第0个到第2个(共3个)作为向量b的初始值

除此之外, 还可以直接使用数组来初始化向量:
int n[] = {1, 2, 3, 4, 5} ;
vector<int> a(n, n+5) ; //将数组n的前5个元素作为向量a的初值
vector<int> a(&n[1], &n[4]) ; //将n[1] - n[4]范围内的元素作为向量a的初值
三、元素的输入及访问
元素的输入和访问可以像操作普通的数组那样, 用cin>>进行输入, cout<<a[n]这样进行输出:
示例:

1 #include<iostream>
2 #include<vector>
3
4 using namespace std ;
5
6 int main()
7 {
8 vector<int> a(10, 0) ; //大小为10初值为0的向量a
9
10 //对其中部分元素进行输入
11 cin >>a[2] ;
12 cin >>a[5] ;
13 cin >>a[6] ;
14
15 //全部输出
16 int i ;
17 for(i=0; i<a.size(); i++)
18 cout<<a[i]<<" " ;
19
20 return 0 ;
21 }

在元素的输出上, 还可以使用遍历器(又称迭代器)进行输出控制。在 vector<int> b(a.begin(), a.begin()+3) ; 这种声明形式中, (a.begin()、a.begin()+3) 表示向量起始元素位置到起始元素+3之间的元素位置。(a.begin(), a.end())则表示起始元素和最后一个元素之外的元素位置。
向量元素的位置便成为遍历器, 同时, 向量元素的位置也是一种数据类型, 在向量中遍历器的类型为: vector<int>::iterator。 遍历器不但表示元素位置, 还可以再容器中前后移动。
在上例中讲元素全部输出部分的代码就可以改写为:
//全部输出
vector<int>::iterator t ;
for(t=a.begin(); t!=a.end(); t++)
cout<<*t<<" " ;
*t 为指针的间接访问形式, 意思是访问t所指向的元素值。
四、向量的基本操作

1>. a.size() //获取向量中的元素个数
2>. a.empty() //判断向量是否为空
3>. a.clear() //清空向量中的元素
4>. 复制
a = b ; //将b向量复制到a向量中
5>. 比较
保持 ==、!=、>、>=、<、<= 的惯有含义 ;
如: a == b ; //a向量与b向量比较, 相等则返回1
6>. 插入 - insert
①、 a.insert(a.begin(), 1000); //将1000插入到向量a的起始位置前
②、 a.insert(a.begin(), 3, 1000) ; //将1000分别插入到向量元素位置的0-2处(共3个元素)
③、 vector<int> a(5, 1) ;
vector<int> b(10) ;
b.insert(b.begin(), a.begin(), a.end()) ; //将a.begin(), a.end()之间的全部元素插入到b.begin()前
7>. 删除 - erase
①、 b.erase(b.begin()) ; //将起始位置的元素删除
②、 b.erase(b.begin(), b.begin()+3) ; //将(b.begin(), b.begin()+3)之间的元素删除
8>. 交换 - swap
b.swap(a) ; //a向量与b向量进行交换

五、二维向量
与数组相同, 向量也可以增加维数, 例如声明一个m*n大小的二维向量方式可以像如下形式:
vector< vector<int> > b(10, vector<int>(5)); //创建一个10*5的int型二维向量
在这里, 实际上创建的是一个向量中元素为向量的向量。同样可以根据一维向量的相关特性对二维向量进行操作。
例:

1 #include<iostream>
2 #include<vector>
3
4 using namespace std ;
5
6 int main()
7 {
8 vector< vector<int> > b(10, vector<int>(5, 0)) ;
9
10 //对部分数据进行输入
11 cin>>b[1][1] ;
12 cin>>b[2][2] ;
13 cin>>b[3][3];
14
15 //全部输出
16 int m, n ;
17 for(m=0; m<b.size(); m++) //b.size()获取行向量的大小
18 {
19 for(n=0; n<b[m].size(); n++) //获取向量中具体每个向量的大小
20 cout<<b[m][n]<<" " ;
21 cout<<"\n" ;
22 }
23
24 return 0;
25 }
学习C++ -> 向量(vector)的更多相关文章
- (转) 学习C++ -> 向量(vector)
vector是向量类型,它是一种对象实体,具有值,所以可以看作是变量. 它可以容纳许多其他类型的相同实体,如若干个整数,所以称其为容器. vector类与一般的Array类的区别在于: 1 ...
- C++向量(Vector)
向量Vector: 向量 vector 是一种对象实体, 能够容纳许多其他类型相同的元素, 因此又被称为容器. 与string相同, vector 同属于STL(Standard Template L ...
- 标准模板库(STL)学习探究之vector容器
标准模板库(STL)学习探究之vector容器 C++ Vectors vector是C++标准模板库中的部分内容,它是一个多功能的,能够操作多种数据结构和算法的模板类和函数库.vector之所以被 ...
- C++学习笔记:Vector容器
vector v:初始化一个0大小的向量 vector v(10):初始化一个10个大小的向量 push_back:增加一个元素 pop:删除一个元素,不返回 front:返回第一个元素 back:返 ...
- StarSpace是用于高效学习实体向量的通用神经模型
StarSpace是用于高效学习实体向量的通用神经模型,用于解决各种各样的问题: 学习单词,句子或文档级嵌入. 文本分类或任何其他标签任务. 信息检索:实体/文件或对象集合的排序,例如 排名网络文件. ...
- C++向量 vector动态数组
需要包含头文件, #include <vector> using namespace std; vector 容器与数组相比其优点在于它能够根据需要随时自动调整自身的大小以便容下所 ...
- Java知多少(78)Java向量(Vector)及其应用
Vector(向量)是 java.util 包中的一个类,该类实现了类似动态数组的功能. 向量和数组相似,都可以保存一组数据(数据列表).但是数组的大小是固定的,一旦指定,就不能改变,而向量却提供了一 ...
- c++基础之向量Vector
首先和string一样要在开头 #include <vector> #include <string> 和string一样,也算是一种容器,而且同属于STL(standard ...
- 【线性代数】1-0:向量(Vector)
title: [线性代数]1-0:向量(Vector) toc: true categories: Mathematic Linear Algebra date: 2017-08-28 10:01:2 ...
随机推荐
- ethereum(以太坊)(九)--global(全局函数)
pragma solidity ^0.4.0; contract modifierTest{ bytes32 public blockhash; address public coinbase; ui ...
- Makefile (1) gcc基础
.c(源文件) --> .i(预处理文件) -->.s(汇编文件) --> -o(目标文件) -->可执行文件 .c --预处理-->.i .i --编译--> ...
- linux 共享内存
共享内存是最高效的IPC机制,因为它不涉及进程之间的任何数据传输.这种高效带来的问题是,我们必须用其他手段来同步进程对共享内存的访问,否则会产生竞态条件.所以,共享内存通常和其他进程间通信方式一起使用 ...
- python——numpy_1图像基本操作
1.图像的数组表示: from PIL import Image from pylab import * from numpy import * im = array(Image.open('E:\P ...
- 笔记-python-coroutine
笔记-python-coroutine 1. 协程 1.1. 协程的概念 协程,又称微线程,纤程.英文名Coroutine.协程是一种用户态的轻量级线程. 线程是系统级别的,它们是由操 ...
- 《Cracking the Coding Interview》——第10章:可扩展性和存储空间限制——题目7
2014-04-24 22:06 题目:搜索引擎问题,如果有一列100台服务器的集群,用来响应查询请求,你要如何设计query分发和cache策略? 解法:query分发可以用计算数字签名并对机器数取 ...
- 常见算法用Pascal实现
基本算法 这些都是非常基本的的算法,希望所有学习的人都能理解! 1.数论算法 求两数的最大公约数 function gcd(a,b:integer):integ ...
- centos6安装openfire(mysql)
一.安装JDK 我的系统是centos6.8x64,首先安装jdk1.7.0 二.安装openfire 我装的包是:openfire-3.9.3-1.i386.rpm,复制到/opt目录 #rpm - ...
- 孤荷凌寒自学python第五十一天初次尝试使用python连接Firebase数据库
孤荷凌寒自学python第五十一天初次尝试使用python连接Firebase数据库 (完整学习过程屏幕记录视频地址在文末) 今天继续研究Firebase数据库,利用google免费提供的这个数据库服 ...
- 洛谷P1071潜伏者(提高组)
题目描述 R国和S国正陷入战火之中,双方都互派间谍,潜入对方内部,伺机行动.历尽艰险后,潜伏于S国的R 国间谍小C终于摸清了 S 国军用密码的编码规则: 1. S国军方内部欲发送的原信息经过加密后在网 ...