vector初始化

A*寻路算法C++简单实现

让人想犯罪 __ 提交于 2019-12-03 07:08:45
A*寻路算法是游戏中常用的AI算法,这里用C++简单实现了一下算法,便于理解。 搜索区域                                如图所示简易地图, 其中绿色方块的是起点 (用 A 表示), 中间蓝色的是障碍物, 红色的方块 (用 B 表示) 是目的地. 为了可以用一个二维数组来表示地图, 我们将地图划分成一个个的小方块。 开始寻路 1.从起点A开始, 把它作为待处理的方格存入一个"开启列表", 开启列表就是一个等待检查方格的列表. 2.寻找起点A周围可以到达的方格, 将它们放入"开启列表", 并设置它们的"父方格"为A. 3.从"开启列表"中删除起点 A, 并将起点 A 加入"关闭列表", "关闭列表"中存放的都是不需要再次检查的方格                                        图中浅绿色描边的方块表示已经加入 "开启列表" 等待检查. 淡蓝色描边的起点 A 表示已经放入 "关闭列表" , 它不需要再执行检查. 从 "开启列表" 中找出相对最适宜的方块, 通过公式 F=G+H 来计算. F = G + H G 表示从起点 A 移动到网格上指定方格的移动耗费 (可沿斜方向移动). H 表示从指定的方格移动到终点 B 的预计耗费 (H 有很多计算方法, 本文代码使用简单的欧几里得距离计算方法).                 

c++刷题(15/100)矩阵转置,最深子树

匿名 (未验证) 提交于 2019-12-03 00:40:02
题目一:矩阵转置 A A 矩阵的转置是指将矩阵的主对角线翻转,交换矩阵的行索引与列索引。 示例 1: 输入:[[1,2,3],[4,5,6],[7,8,9]] 输出:[[1,4,7],[2,5,8],[3,6,9]] 示例 2: 输入:[[1,2,3],[4,5,6]] 输出:[[1,4],[2,5],[3,6]] 思路:比较简单,但要注意对矩阵的初始化,如果不初始化会报错--》reference binding to null pointer of type ‘struct value_type‘ class Solution { public : vector <vector< int >> transpose(vector<vector< int >>& A) { if (A.size()== 0 ){ return A ; } vector <vector< int >> Ar(A[ 0 ].size()); for ( int i = 0 ; i < Ar.size(); i++ ) Ar[i].resize(A.size()); for ( int i = 0 ; i<A[ 0 ].size(); i++ ) { for ( int j = 0 ; j<A.size(); j++ ) { Ar[i][j] = A[j][i]; } } return Ar ; } };

Combinations 组合

匿名 (未验证) 提交于 2019-12-03 00:34:01
n k k 示例: 输入: 输出: [ [2,4], [3,4], [2,3], [1,2], [1,3], [1,4], ] 思路:类似于9*9乘法口诀表逐层减一的操作,即如下例子所示(输入n=4,k=2) 1分别对应2,3,4 2分别对应3,4 3对应4 然后把每种组合组合起来即可,这里采用递归的解法,每次都从i=start调用到i=(end-k+1),这里初始化传入的start=1,end=n。当k==0时表示已经不能再分,所以把结果放入res中。 参考代码: class Solution { public: void combineCore(int start, int end, int k, vector<vector<int>> &res, vector<int> tmp) { if ((end - start + 1) < k) { return; } if (k == 0) { res.push_back(tmp); return; } for (int i = start; i <= (end - k + 1); i++) { tmp.push_back(i); combineCore(i + 1, end, k - 1, res, tmp); tmp.pop_back(); } } vector<vector<int>> combine(int n, int k

动态规划经典问题总结

匿名 (未验证) 提交于 2019-12-03 00:25:02
假设有几种硬币,如1、3、5,并且数量无限。请找出能够组成某个数目的找零所使用最少的硬币数。 这是一道经典的动态规划方法,我们可以维护一个一维动态数组dp,其中dp[i]表示钱数为i时的最小硬币数的找零,递推式为:dp[i] = min(dp[i], dp[i - coins[j]] + 1); 其中coins[j]为第j个硬币,而i - coins[j]为钱数i减去其中一个硬币的值,剩余的钱数在dp数组中找到值,然后加1和当前dp数组中的值做比较,取较小的那个更新dp数组。 class Solution { public : int coinChange( vector < int > & coins, int amount) { int Max = amount + 1 ; vector < int > dp(amount + 1 , Max); dp[ 0 ] = 0 ; for ( int i = 1 ; i <= amount; i++) { for ( int j = 0 ; j < coins.size(); j++) { if (coins[j] <= i) { dp[i] = min(dp[i], dp[i - coins[j]] + 1 ); } } } return dp[amount] > amount ? - 1 : dp[amount]; } };

向量vector 容器浅析

坚强是说给别人听的谎言 提交于 2019-12-03 00:17:54
一、什么是vector? 向量(Vector)是一个封装了动态大小数组的顺序容器(Sequence Container)。跟任意其它类型容器一样,它能够存放各种类型的对象。可以简单的认为,向量是一个能够存放任意类型的动态数组。 二、容器特性 1.顺序序列 顺序容器中的元素按照严格的线性顺序排序。可以通过元素在序列中的位置访问对应的元素。 2.动态数组 支持对序列中的任意元素进行快速直接访问,甚至可以通过指针算述进行该操作。操供了在序列末尾相对快速地添加/删除元素的操作。 3.能够感知内存分配器的(Allocator-aware) 容器使用一个内存分配器对象来动态地处理它的存储需求。 三、基本函数实现 1.构造函数 vector():创建一个空vector vector(int nSize):创建一个vector,元素个数为nSize vector(int nSize,const t& t):创建一个vector,元素个数为nSize,且值均为t vector(const vector&):复制构造函数 vector(begin,end):复制[begin,end)区间内另一个数组的元素到vector中 2.增加函数 void push_back(const T& x):向量尾部增加一个元素X iterator insert(iterator it,const T& x)

常用算法

匿名 (未验证) 提交于 2019-12-02 23:56:01
排序普通类型 bool complare(int a, int b) { return a < b; // 从小到大, 形参顺序不变, 看大小号判断排序顺序 return a > b; // 从大到小 } int a[10] = { 1, 7, 4, 0, 9, 4, 8, 8, 2, 4 }; sort(a, a + 10); // 数组长度 sort(a, a + 10, complare); 排序vector bool complare(int a, int b) { return a > b; } vector<int> vt; for (int i = 0; i < 10; i++) { vt.push_back(static_cast<int>(rand() % 10)); } for (auto v : vt) cout << v << " "; cout << endl; sort(vt.begin(), vt.end(), complare); for (auto v : vt) cout << v << " "; cout << endl; myClass c1, c2; swap(c1, c2); int a = 1, b = 2; cout << max(a, b) << ' ' << endl; cout << min(a, b) << ' ' <<

STL标准模板库之vector

匿名 (未验证) 提交于 2019-12-02 23:54:01
Ŀ¼ STL提供了一组表示容器、迭代器、函数对象和算法的模板。 容器是一个与数组类似的单元,可以存储若干个值。STL容器是同质的,即存储的值的类型相同; 算法是完成特定任务(如对数组进行排序或在链表中查找特定值)的处方; 迭代器能够用来遍历容器的对象,与能够遍历数组的指针类似,是广义指针; 函数对象是类似于函数的对象,可以是类对象或函数指针(包括函数名,因为函数名被用作指针)。 STL使得能够构造各种容器(包括数组、队列和链表)和执行各种操作(包括搜索、排序和随机排列) 接下来介绍几种ACMer必须掌握的几个成员 向量(Vector)是一个封装了动态大小数组的顺序容器(Sequence Container)。跟任意其它类型容器一样,它能够存放各种类型的对象。可以简单的认为,向量是一个能够存放任意类型的动态数组。 一般来说数组不能动态拓展,因此在程序运行的时候不是浪费内存,就是造成越界。而vector正好弥补了这个缺陷,它的特征是相当于可分配拓展的数组(动态数组),它的随机访问快,在中间插入和删除慢,但在末端插入和删除快。 //头文件必须包含: #include<vector> //定义一个vector,int为数组元素的数据类型,test1为动态数组名 vector<int>test1; //定义一个元素为结构体型的vector vector<information>test2 /

第3课 auto类型推导(2)

匿名 (未验证) 提交于 2019-12-02 23:49:02
第3课 auto类型推导(2) 一、使用auto的优势 【编程实验】优先使用auto #include <iostream> #include <vector> #include <map> #include <functional> #include <unordered_map> #include <boost/type_index.hpp> using namespace std; using boost::typeindex::type_id_with_cvr; //辅助类模板,用于打印T的类型 template <typename T> void printType(string s) { cout << s << " = " << type_id_with_cvr<T>().pretty_name() << endl; } class Widget { int mArea; public: bool operator<(const Widget& w) { return mArea < w.mArea; } }; //简化变量/对象类型的声明 template<typename It> //It为迭代器类型 void dwim(It b, It e) //dwim = do what I mean,做我所想 { while (b != e) { /

eigen 中四元数、欧拉角、旋转矩阵、旋转向量

匿名 (未验证) 提交于 2019-12-02 23:49:02
一、旋转向量 1.0 初始化旋转向量:旋转角为alpha,旋转轴为(x,y,z) Eigen::AngleAxisd rotation_vector(alpha,Vector3d(x,y,z)) 1.1 旋转向量转旋转矩阵 Eigen::Matrix3d rotation_matrix;rotation_matrix=rotation_vector.matrix(); Eigen::Matrix3d rotation_matrix;rotation_matrix=rotation_vector.toRotationMatrix(); 1.2 旋转向量转欧拉角(Z-Y-X,即RPY) Eigen::Vector3d eulerAngle=rotation_vector.matrix().eulerAngles(2,1,0); 1.3 旋转向量转四元数 Eigen::Quaterniond quaternion(rotation_vector); Eigen::Quaterniond quaternion;Quaterniond quaternion; Eigen::Quaterniond quaternion;quaternion=rotation_vector; 二、旋转矩阵 2.0 初始化旋转矩阵 Eigen::Matrix3d rotation_matrix;rotation

openCV---相机内外参标定

匿名 (未验证) 提交于 2019-12-02 23:32:01
https://blog.csdn.net/u012319493/article/details/77622053 来源 张正友相机标定Opencv实现以及标定流程&&标定结果评价&&图像矫正流程解析(附标定程序和棋盘图) https://my.oschina.net/abcijkxyz/blog/787659 将openCV安装目录下的“opencv2.4.8\opencv\sources\samples\cpp”中的有关棋盘的图片复制到工程目录下 这里写图片描述 在“calibdata.txt”中写入以下内容: left01.jpg left02.jpg left03.jpg left04.jpg left05.jpg left06.jpg left07.jpg left08.jpg left09.jpg left10.jpg #include <iostream> #include <sstream> #include <time.h> #include <stdio.h> #include <fstream> #include <opencv2/core/core.hpp> #include <opencv2/imgproc/imgproc.hpp> #include <opencv2/calib3d/calib3d.hpp> #include <opencv2