vector初始化

ORBSLAM的ORB特征提取

故事扮演 提交于 2020-01-19 01:39:55
ORBSLAM中的主要使用了ORB特征,也就是FAST特征+BRIEF描述子的组合,具体这两种方法就不详细介绍了,这里主要说一下每个特征对应的描述子在ORBSLAM中的维护方式; 首先需要说明的是每个frame都有自己对应的找到的feature,在进行特征提取前会先初始化一个Extractor,也就是: void Frame::ExtractORB(int flag, const cv::Mat &im) { if(flag==0) (*mpORBextractorLeft)(im,cv::Mat(),mvKeys,mDescriptors); else (*mpORBextractorRight)(im,cv::Mat(),mvKeysRight,mDescriptorsRight); } 第二步:初始化完成后就是提取,这里的入口函数是: // 计算ORB特征,_keypoints中的坐标与scale已经无关 /* _image: 原图 * mvImagePyramid:ComputePyramid() 的结果,不同大小的图片 * allKeypoints:对应mvImagePyramid中每一层图像的特征点,是与金字塔图像坐标对应的,就是在原图像的基础上经过缩放的 * _keypoints:对allKeypoints中每一个点找到对应的描述子后,再进行scale, *

转载

社会主义新天地 提交于 2020-01-17 05:21:14
转载 :http://www.cnblogs.com/lxshanye/archive/2013/05/20/3088558.html 1.变长一维数组 这里说的变长数组是指在编译时不能确定数组长度,程序在运行时需要动态分配内存空间的数组。实现变长数组最简单的是变长一维数组,你可以这样做: 1: //文件名: array01.cpp 2: #include<iostream> 3: using namespace std; 4: int main() 5: { 6: int len; 7: cin>>len; 8: //用指针p指向new动态分配的长度为len*sizeof(int)的内存空间 9: int *p=new int[len]; 10: ........... 11: delete[] p; 12: return 0; 13: } 注意int *p=new int[len];这一句,你不能这样做: int p[len]; C++编译器会报错说len的大小不能确定,因为用这种形式声明数组,数组的大小需要在编译时确定。而且这样也不行: int p[]=new int[len]; 编译器会说不能把int*型转化为int[]型,因为用new开辟了一段内存空间后会返回这段内存的首地址,所以要把这个地址赋给一个指针,所以要用int *p=new int[len]; array01

stl

生来就可爱ヽ(ⅴ<●) 提交于 2020-01-15 23:40:02
容器 vector 特点:动态数组 元素类型相同 只能从尾部快速插入或者删除 随机访问快 中间插入删除慢(需要移动) capcity是给的块的大小 定义vector vector<int> A(10, 1); //声明一个初始大小为10且值都是1的向量 vector<int> A(tmp); //声明并用tmp向量初始化vec向量 vector<int> tmp(A.begin(), A.begin() + 3); //用向量vec的第0个到第2个值初始化tmp int arr[5] = {1, 2, 3, 4, 5}; vector<int> A(arr, arr + 5); //将arr数组的元素用于初始化A向量 //说明:当然不包括arr[4]元素,末尾指针都是指结束元素的下一个元素, //这个主要是为了和vec.end()指针统一 vector<int> A(&arr[1], &arr[4]); //将arr[1]~arr[4]范围内的元素作为A的初始值 vector操作 向量大小: A.size(); 向量最大容量: A.max_size();与机器有关 与程序无关 更改向量大小: A.resize(n); n是新的大小 例证capacity、resize、shrink to fit 的关系 vector<int> myvector(100);#myvector

STL_vector

帅比萌擦擦* 提交于 2020-01-14 17:30:43
1.任何改变vector长度的操作都会使已经存在的迭代器失效 vector是C++标准模板库中的部分内容,它是一个多功能的,能够操作多种数据结构和算法的模板类和函数库。vector之所以被认为是一个容器,是因为它能够像容器一样存放各种类型的对象,简单地说,vector是一个能够存放任意类型的动态数组,能够增加和压缩数据。   为了可以使用vector,必须在你的头文件中包含下面的代码:   #include <vector>   vector属于std命名域的,因此需要通过命名限定,如下完成你的代码:   using std::vector;   vector<int> vInts;   或者连在一起,使用全名:   std::vector<int> vInts;   建议使用全局的命名域方式:using namespace std;   函数   表述   c.assign(beg,end)c.assign(n,elem)   将[beg; end)区间中的数据赋值给c。将n个elem的拷贝赋值给c。   c.at(idx)   传回索引idx所指的数据,如果idx越界,抛出out_of_range。   c.back()   传回最后一个数据,不检查这个数据是否存在。   c.begin()   传回迭代器中的第一个数据地址。   c.size()   返回容器中数据个数。  

std__vector介绍

a 夏天 提交于 2020-01-14 04:14:06
vector 是 C++标准模板库中的部分内容,它是一个多功能的,能够操作多种 数据结构 和 算法 的模板类和函数库。 vector 之所以被认为是一个容器,是因为它能够像容器一样存放各种类型的对象,简单地说, vector 是一个能够存放任意类型的动态数组,能够增加和压缩数据。 为了可以使用 vector ,必须在你的头文件中包含下面的代码: # include <vector> vector 属于 std 命名域的,因此需要通过命名限定,如下完成你的代码: using std::vector; vector< int > vInts; 或者连在一起,使用全名: std::vector< int > vInts; 建议使用全局的命名域方式: using namespace std; 函数 表述 c.assign(beg,end) c.assign(n,elem) 将 [beg; end) 区间中的数据赋值给 c。 将 n个 elem 的拷贝赋值给c。 c.at(idx) 传回索引 idx 所指的数据,如果 idx 越界,抛出 out_of_range。 c.back() 传回最后一个数据,不检查这个数据是否存在。 c.begin() 传回迭代器中的第一个数据地址。 c.capacity() 返回容器中数据个数。 c.clear() 移除容器中所有数据。 c.empty()

CSharp中的Vector结构

混江龙づ霸主 提交于 2020-01-13 13:57:46
本节将开发一个结构Vector,来演示运算符重载,这个Vector结构表示一个三维矢量。如果数学不是你的强项,不必担心,我们会使这个例子尽可能简单。三维矢量 只是三个(double)数字的一个集合,说明物体和原点之间的距离,表示数字的变量是x、y和z,x表示物体与原点在x方向上的距离,y表示它与原点在y方向上的距离, z表示高度。把这3个数字组合起来,就得到总距离。例如,如果x=3.0, y=3.0, z=1.0,一般可以写作(3.0, 3.0, 1.0),表示物体与原点在x方向上的距离是3,与原点在 y方向上的距离是3,高度为1。 矢量可以与矢量或数字相加或相乘。在这里我们使用术语"标量"(scalar),它是数字的数学用语-- 在C#中,就是一个double。相加的作用是很明显的。如果先移动(3.0, 3.0, 1.0),再移动(2.0, -4.0, -4.0),总移动量就是把这两个矢量加起来。矢量的相加是指把每个元素分别相加,因此得到(5.0, -1.0,-3.0)。此时,数学表达式总是写成c=a+b,其中a和b是矢量,c是结果矢量。这与使用Vector结构的方式是一样的。 注意: 这个例子是作为一个结构来开发的,而不是类,但这并不重要。运算符重载用于结构和类时,其工作方式是一样的。 下面是Vector的定义-- 包含成员字段、构造函数和一个ToString()重写方法

C++ vector

徘徊边缘 提交于 2020-01-13 13:35:48
注:转载自网络,谢谢作者整理! vector是C++标准模板库中的部分内容,它是一个多功能的,能够操作多种数据结构和算法的模板类和函数库。vector之所以被认为是一个容器,是因为它能够像容器一样存放各种类型的对象,简单地说,vector是一个能够存放任意类型的动态数组,能够增加和压缩数据。   为了可以使用vector,必须在你的头文件中包含下面的代码:   #include <vector>   vector属于std命名域的,因此需要通过命名限定,如下完成你的代码:   using std::vector;   vector<int> vInts;   或者连在一起,使用全名:   std::vector<int> vInts;   建议使用全局的命名域方式:using namespace std;   函数   表述   c.assign(beg,end)c.assign(n,elem)   将[beg; end)区间中的数据赋值给c。将n个elem的拷贝赋值给c。   c.at(idx)   传回索引idx所指的数据,如果idx越界,抛出out_of_range。   c.back()   传回最后一个数据,不检查这个数据是否存在。   c.begin()   传回迭代器中的第一个数据地址。   c.size()   返回容器中数据个数。   c.clear()  

vector学习

梦想与她 提交于 2020-01-13 05:10:50
 vector是C++标准模板库中的部分内容,它是一个多功能的,能够操作多种数据结构和算法的模板类和函数库。 vector之所以被认为是一个容器,是因为它能够像容器一样存放各种类型的对象,简单地说,vector是一个能够存放任意类型的动态数组,能够增加和压缩数据。   为了可以使用vector,必须在你的头文件中包含下面的代码:    #include <vector>   vector属于std命名域的,因此需要通过命名限定,如下完成你的代码:   using std::vector;   vector<int> vInts;   或者连在一起,使用全名:   std::vector<int> vInts;   建议使用全局的命名域方式:using namespace std;   函数   表述    c.assign(beg,end)c.assign(n,elem)    将[beg; end)区间中的数据赋值给c。将n个elem的拷贝赋值给c。    c.at(idx)   传回索引idx所指的数据,如果idx越界,抛出out_of_range。    c.back()   传回最后一个数据,不检查这个数据是否存在。    c.begin()   传回迭代器中的第一个数据地址。    c.size()   返回容器中数据个数。    c.clear()  

Standard C++ Episode 11

こ雲淡風輕ζ 提交于 2020-01-12 07:11:23
一、标准模板库(STL) (p.s. STL中的常用实用工具 auto_ptr string pair ) 1.定义了一系列的容器模板(类模板),实现泛型化的数据结构。 1)向量(vector, 这里说的"向量"就是数组), 向量内存连续,支持下标访问和随机迭代,只有在尾部进行插入和删除效率才比较高。 2)列表(list),内存不连续,不支持下标访问和随机迭代,在任何位置进行插入和删除效率都很高。 3)双端队列(deque),内存连续,支持下标访问和随机迭代,在首尾两端进行插入和删除效率都比较高。 以上三种合称为线性容器。 4)堆栈(stack),后进先出 5)队列(queue),先进先出 6)优先队列(priority_queue),优者先出 以上三种合称为适配器容器,通过某种线性容器适配。 7)映射(map),是键值对(KVP)的集合,按键升序,键唯一。 采用了有序二叉树(二叉搜索树)数据结构实现。 8)集合(set),没有值只有键的映射, 按键升序。 9)多重映射(multimap),允许重复键的映射,即键不唯一。按键升序。 10)多重集合(multiset),没有值只有键的多重映射。按键升序。 以上四种合称为关联容器。通过有序树表达数据的关联性。按键升序。 2.泛型函数(函数模板) template<typename T> void swap (T& a, T& b) {

C++primer(第五版)第九章 顺序容器(容器的运用及其部分习题解答,C++11特性总结,重点章节内容较多)

故事扮演 提交于 2020-01-12 04:21:45
顺序容器: 为程序员提供了控制元素存储和访问顺序的能力。(无序容器) 1.顺序容器的概述 A.顺序容器的类型 vector:可变大小数组。支持快速随机访问。在尾部之外的位置插入或删除元素可能很慢。 deque:双端队列。支持快速随机访问。在头尾位置插入/删除速度很快。 list:双向链表。只支持双向顺序访问。在list中任何位置进行插入/删除操作速度都很快。 forword_list:单向链表。只支持单向顺序访问。在链表的任何位置进行插入/删除操作速度都很快。(无size()) array:固定大小数组。支持快速随机访问。不能添加和删除元素。 string:与vector相似的容器,但专门用于保存字符。随机访问快。在尾部插入/删除速度快。 根据以上顺序容器的类型介绍,从而习题9.1答案就很简单了:list(字母序是任何位置插入)、deque(头部尾部插入/删除)、vector(可变容器)。 2.容器库 A.迭代器 迭代器中beigin是指容器首元素,end是指容器的最后一个元素的后一个位置; B.容器的拷贝 容器的拷贝有两种操作方法:一是直接拷贝整个容器,二是拷贝一个迭代器对指定的元素范围。前者需要两个容器的类型和元素类型必须匹配;后者不要求容器类型相同元素类型也可不同,但需要元素转换。 例子: list<string> authors ={"Milton",