[NIPS2023] asynchrony robust collaborative perception via birds eye view flow Paper Conference
1. motivation irregular asynchronous setting: the time stamps of the collaboration messages from other agents are not aligned the time interval of two consecutive messages from the same agent is irregular Problem formulation: maxP,θ∑n=1Ng(Y^ntni,Yntni)subject to Y^ntni=cθ(Xntni,{Pm→ntmj,Pm→ntmj−1,...,Pm→ntmj−k+1}m=1N)\max_{P,\theta}\sum_{n=1}^{N}g(\widehat{Y}_{n}^{t_{n}^{i}},{Y}_{n}^{t_{n}^{i}})\\ \text{subject to }\widehat{Y}_{n}^{t_{n}^{i}}=c_{\theta}(X_{n}^{t_n^i},\{P_{m\rightarrow...
1、函数指针
总结:尽量避免使用函数指针. 函数名与函数指针 double foo(int a,int b);//函数声明,double foo(int,int)为函数原型 上面这行代码为 函数声明 ,foo为 函数名 ,double (int,int)为 函数签名. 函数名是一个标识符,它是不可赋值的,它是可调用的. &foo表示函数的地址,函数地址 也是可以调用的,例如: (&foo)(1,2);//与foo(1,2)相同. 由于&foo表示foo函数的地址,则&foo的类型就是函数指针.函数指针指向函数签名相同的函数. 定义并初始化函数指针 double pam (int);double (*pf)(int)=pam;auto...
2、内联函数、左值引用、函数重载
内联函数 为什么使用内联函数? 减少上下文切换,加快程序运行速度。 是对C语言中的宏函数的改进。 语法 #include<iostream>using namespace std;inline double square(double x){ return x*x;}int main(){ cout<<square(2.2)<<endl;} 其实就是在函数声明或者定义前加上关键字inline。 左值与右值 在C++11中,我们将值划分为:左值、右值(分为纯右值和可扩展右值) 左值:可以取地址,有名字的值 右值:不能取地址,没有名字的值,存活时间很短 纯右值:运算表达式,如1+2,或者和对象无关的字面值,如true,或者 非引用 的函数返回值,或者lambda表达式 可扩展右值:仅和右值引用相关的值,它包括:右值引用...
3、从源码到可执行文件
简析 一般来说,C++程序会分为 头文件和源代码文件。 C++鼓励我们将组件函数放在单独的文件中,这就意味着会存在多个源代码文件,C++鼓励我们对这些源代码文件单独编译,然后将这些文件的编译版本链接。 单独编译后在链接的意义在于:如果我们要对一个源文件修改,我们就可以只对这个源文件编译,然后和其他文件的编译版本链接。 比如下面这个程序,有一个有文件coordin.h,两个源代码文件 file1.cpp和file2.cpp coordin.h #ifndef a#define astruct polar{ double distance; double angle;};struct rect{ double x; double y;};polar rect_to_polar(rect xypos);void show_polar(polar...
4、内存模型
C++11使用4种方案来存储数据,这4种方案的区别主要是数据保留在内存的时间,即4种存储持续性(duration) 自动存储 静态存储 线程存储 动态存储 作用域(scope):描述了名称在文件的多大范围内可见 链接性(linkage): 描述了名称在不同文件种的共享的方式 外部链接性 内部链接性 无链接性 自动存储(局部变量) 自动存储的变量是最简单的,就是在代码段中int a=1类似的这种变量,也可以使用关键词register来显式表示他是自动存储的变量,register int...
5、名称空间
背景 声明区域(declaration region):可以进行声明的区域。 全局变量的声明区是整个文件,函数内声明的变量的声明区是代码块。 潜在作用域(potential scope):声明位置开始到声明区截止。 作用域(scope):变量对程序的可见范围。 变量的作用域是潜在作用域的子集。 例如,在函数中声明的局部变量会隐藏同名的全局变量,导致全局变量的作用域缺少一部分。 名称空间(namespace):每个声明区都可以声明名称,并且这些名称独立于其他声明区的名称。(例如:一个函数中的局部变量不会和另一个函数的局部变量发生冲突。)所以说,每个声明区就是一个名称空间。 C++允许我们自己创造名称空间。为了统一概念,我们不再把代码块当成名称空间,所以名称空间只有两种:全局名称空间 用户创造的名称空间 名称空间 我们创造两个名称空间Jack和Jill int Hill;namespace Jack{ double pail; void fetch(); int pal; struct...
6、对象和类(上)
...
6、对象和类(下)
this指针 到目前为止,每个类成员函数只涉及一个对象,即调用它的对象。但是我们有时候需要涉及多个对象,在这种情况下,必须使用this指针。 例如,我们要求一个函数实现比较两个股票的总价值,并选出大的那个股票。 那么这个成员函数的原型肯定是: const Stock & topval(const Stock &s)const; 首先这肯定是const成员函数,其次它的肯定要接收一个Stock对象,返回值也必须是一个Stock对象。 那么,调用这个成员函数时, top=stock1.topval(stock2)和top=stock2.topval(stock1)是等价的。 下面我们来看看函数如何定义? const Stock & Stock::topval(const Stock& s)const{ if(s.total_val>total_val) { return s; } else return...
8、友元和运算符重载
运算符重载 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; public: Time(); Time(int h,int...
9、类的类型转换
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 { ...