在之前一段之间学习相机标定的时候,经常碰到二维向量,查阅了许多博客和相关书籍,书本上只提及到一维向量,二维向量没有相关介绍。网上的博客大多也都写的一知半解,很粗糙,晦涩难懂。今天在几篇好的博文中,又学习了下,有些收获感悟,做下记录,方便以后自己的查阅与学习。
可将向量(vector)视为能在程序运行时改变长度(增大和缩小)的数组。
vector a ; //声明一个int型向量a
vector a(10) ; //声明一个初始大小为10的向量
vector a(10, 1) ; //声明一个初始大小为10且初始值都为1的向量
vector b(a) ; //声明并用向量a初始化向量b
vector b(a.begin(), a.begin()+3) ; //将a向量中从第0个到第2个(共3个)作为向量b的初始值
也可以用数组来初始化向量
int n[] = {1, 2, 3, 4, 5} ;
vector a(n, n+5) ; //将数组n的前5个元素作为向量a的初值
vector a(&n[1], &n[4]) ; //将n[1] - n[4]范围内的元素作为向量a的初值
2. 向量元素的输出和访问
#include
#include
using namespace std ;
int main()
{
vector a(10, 0) ; //大小为10初值为0的向量a
//对其中部分元素进行输入
cin >>a[2] ;
cin >>a[5] ;
cin >>a[6] ;
//全部输出
int i ;
for(i=0; i
3. 向量的基本操作
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 a(5, 1) ;
vector 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向量进行交换
4. 二维向量
如果一个向量的每一个元素是一个向量,则称为二维向量,如下:
vector> b(3, vector(4)); //创建一个3*4的int型二维向量
将构造一个二维向量b,它含有三个元素,每个元素含有4个int型元素的向量。编译器两次调用vector的构造函数构造对象b,第一次调用构造函数构造了一个无名的含有4个0的vector
[0] | [1] | [2] | [3] |
0 | 0 | 0 | 0 |
第二次调用构造函数,以这个无名向量为初值初始化它的三个元素,结果是:
b | [0] | [1] | [2] | [3] |
[0] | 0 | 0 | 0 | 0 |
[1] | 0 | 0 | 0 | 0 |
[2] | 0 | 0 | 0 | 0 |
b[i] 表示第 i (i=0,1,2) 行的元素组成的向量。b.size()的值是3,b[0].size()的值是4。
vector< vector > b(10, vector(5, 0)) ;
//对部分数据进行输入
cin>>b[1][1] ;
cin>>b[2][2] ;
cin>>b[3][3];
//全部输出
int m, n ;
for(m=0; m < b.size(); m++) //b.size()获取行向量的大小
{
for(n=0; n < b[m].size(); n++) //获取向量中具体每个向量的大小
cout << b[m][n] << " " ;
cout << "\n" ;
}
本博客参考如下:
c++基础之向量Vector
用vector实现二维向量