无标题
使用类(一)运算符重载和友元 理解了类和对象的通用原理后,我们的重点应该放在类设计技术。 运算符重载 C++中的运算符本质上就是函数,函数可以重载,那么运算符也是可以重载的,C++允许将运算符重载扩充到用户定义的类型,例如可以使用+将两个对象加起来。 要重载运算符,要使用运算符函数。它的形式是: operatorop(argument-list) 如果一个类重载了+,a,b,c是三个对象。则我们可以使用: c=a+b;c=a.operator+(b); 上面这两种调用+,是等价的。 d=a+b+c; 上面代码也是可行的,因为+是从左到右结合的上面式子等价于 d=a.operator+(b+c);进一步的d=a.operator+(b.operator+(c)); 例子:重载+、-、*的类 我们设计一个类,用来表示时间的数据类型,时间的加法减法乘法可以通过重载运算符的方式。 //使用类1.h#ifndef TIME#define TIMEclass Time{ private: int hour; int min; ...
无标题
使用类(二)类的类型转换 上接使用类(一) 1. 将标准类型转换成类类型 有C语言基础的都知道,标准类型的是可以进行类型转换的,例如,数值类型中int和double可以互相进行隐式类型转换。int类型和int *类型就无法进行隐式转换(或称自动类型转换),int *p=10;是错误的,但是我们可以使用显式类型转换(或称强制类型转换),int *p=(int *)10;是正确的。 实际上,C++允许我们给自定义类型(类)和标准类型进行互相转换。 看看下面这个例子: #include<iostream>#include<string>class apple{ int number; std::string color; public: apple(int n=0,std::string c="no color") { number=n; color=c; } void display()const { ...
无标题
类和动态内存分配(二) 1. 在类中使用动态内存分配的注意事项 1.1 构造函数中使用new 如果在构造函数中使用new来初始化指针成员,则应在析构函数中使用delete new和delete必须相互兼容,new相对delete;new[]相对delete[] 因为只有一个析构函数,所有的构造函数都必须与它兼容 注意的是:delete或者delete[]都可以对空指针操作. NULl和0和nullptr:空指针可以用0或者NULL来表示,C++11使用一个特殊的关键词:nullptr来表示空指针. 应该定义一个复制构造函数,通过深度复制将一个对象初始化成另一个对象. String::String(const String &st)//复制构造函数{ len=st.len; str=new char[len+1]; std::strcpy(str,st.str); num_strings++;} 应该定义一个赋值运算符。 String& String::operator=(const...
无标题
类和动态分配(一)设计一个String类 对类成员使用动态内存分配会产生一系列问题。我们需要对原有类体系进行扩充。 1. 实例:StringBad类 #include<iostream>#ifndef STRNGBAD_H_#define STRNGBAD_H_class StringBad{private: char * str; //指向字符串的指针 int len; //字符串的长度 static int num_strings; //对象个数public: StringBad(const char * s); //构造函数 StringBad(); //默认构造函数 ~StringBad(); //析构函数 //友元函数 friend std::ostream & operator<<(std::ostream & os,const StringBad &...
[2024.11.25-arxiv] DiffusionDrive: Truncated Diffusion Model for End-to-End Autonomous Driving
motivation:diffusion model for planning diffusion model 现在很多应用在traffic simulation 上,在用 diffusion model 做 plan的没有。 (a): this paradigm does not account for the inherent uncertainty and multi-mode nature of driving behaviors. 无法表示 uncertainty (b): this large fixed-vocabulary paradigm is fundamentally constrained by the number and quality of anchor trajectories, often failing in out-of-vocabulary scenarios. Furthermore, managing a large number of anchors presents significant computational...
[ECCV 2024]GenAD: Generative End-to-End Autonomous Driving
motivation Most existing end-to-end autonomous driving models are composed of several modules and follow a pipeline of perception, motion prediction, and planning .However, the serial design of prediction and planning of existing pipelines ignores the possible future interactions between the ego car and the other traffic participants. Also, future trajectories are highly structured and share a common prior (e.g., most trajectories are continuous and straight lines). Still, most existing...
多跳转机本地端口转发--实现本地访问远程端口
本地端口转发 本地主机A想要访问服务器B上localhost:10086的服务,应该怎么做?一种常见做法就是,将A主机上的端口pa映射到主机B上中localhost的端口8888。 A无法直接访问B的IP地址,但是可以通过跳转机J1,J2来和B建立ssh关系,即:A–>J1—>J2—>B host ip username port A / / 123,124,125 J1 1.1.1.1 user1 22(22端口建立ssh关系) J2 2.2.2.2 user2 22 B 3.3.3.3 user3 22 B:localhost 3.3.3:localhost / 10086 建立A的123端口和J2的22端口的映射,通过跳转机J1 ssh -L -N 123:2.2.2.2:22 user1@1.1.1.1 建立A的端口124和B的22端口映射,通过跳转机J2(可以使用localhost的123端口来和J2建立ssh) ssh -L -N 124:3.3.3.3:22 user2@localhost -p...
[CVPR 2023]VAD: Vectorized Scene Representation for Efficient Autonomous Driving
Introduction 这篇文章刷新了端到端自动驾驶领域的sota (2023)。 traditional autonomous driving methods采用模块化模式,其中感知和规划被解耦为独立的模块。其缺点是规划模块无法访问原始传感器数据,这些数据包含丰富的语义信息。由于规划完全基于先前的感知结果,因此在规划阶段,感知中的误差可能会严重影响规划, 无法被识别和纠正,从而导致安全问题。而端到端自动驾驶方法(end-to-end autonomous driving methods)将传感器数据作为感知的输入,并通过一个整体模型输出规划结果。 这篇文章提出了Vectorized Scene Representation for Efficient Autonomous Driving(VAD),即将所有的驾驶场景建模为矢量表示,一方面,VAD利用矢量化的智能体运动和映射元素作为明确的实例级规划约束,有效地提高了规划安全性;另一方面,VAD通过摆脱计算密集型的栅格化表示和手工设计的后处理步骤,比以前的端到端规划方法运行得快得多。具体来说,VAD-Base,...
Auto-Encoding Variational Bayes
Problem scenario 已知隐变量的先验分布和条件生成分布 以上背景下的相关问题有: Preliminary evidence lower bound (variational lower bound) 推断(inference)可以理解为计算后验分布P(Z∣X)P(Z|X)P(Z∣X), P(Z∣X)=P(X,Z)∫zP(X,Z=z)dzP(Z|X)=\frac{P(X,Z)}{\int_z{P(X,Z=z)}dz} P(Z∣X)=∫zP(X,Z=z)dzP(X,Z) 其中分母(规范项)很难计算,所以精确计算后验分布很困难,常常有两种方法求解近似的后验分布。 采样法:例如MCMC,MCMC方法是利用马尔科夫链取样来近似后验概率,它的计算开销很大,且精度和样本有关系。 变分法:使用一个简单的概率分布来近似后验分布,于是就转换为一个优化问题 KL divergence: DKL(q∣∣p)=Ex∼q[logpq]=∑xq(x)logp(x)q(x)D_{KL}(q||p)=E_{x\sim...
Git回退到某次提交,并删除历史提交
使用reset命令将 Git 仓库的当前分支的 HEAD 指针、索引(暂存区)和工作目录都重置到指定的提交(commit)状态。 git reset --hard commit-hash 或者采用soft来保留修改,意思就是说,工作区代码不变,head回退到某次提交。 git reset --soft commit-hash 然后使用git push force来将本地的HEAD提交到远端,这样直接就会覆盖掉远端的历史提交,同时两端同步,本地历史提交也会被删除 git push origin HEAD --force