C++11常用知識

頂層const:指針本身是一個常量;
底層const:指針指向的對象是一個常量;

nullptr 常量: 空指針,與0等價,增加了可讀性
constexpr 變量:申明一個常量表達式

類型別名聲明:
typedef double dnum; 等價於 using dnum2 = double;
typedef char pstring; 等價於 using pstring2 = char;

auto 類型指示符:auto讓編譯器通過初始值來推算變量的類型,所以,其定義的變量必須要有初始值;

decltype 類型指示符:選擇並返回操作數的數據類型

std::thread 支持了併發編程,在不同平臺上不再依賴於系統底層的 API,實現了語言層面的跨平臺支持
std::regex提供了完整的正則表達式支持等等

std::shared_ptr 是一種智能指針,它能夠記錄多少個 shared_ptr 共同指向一個對象,從而消除顯示的調用 delete,當引用計數變爲零的時候就會將對象自動刪除。

但還不夠,因爲使用 std::shared_ptr 仍然需要使用 new 來調用,這使得代碼出現了某種程度上的不對稱。

std::make_shared 就能夠用來消除顯示的使用 new,所以std::make_shared 會分配創建傳入參數中的對象,並返回這個對象類型的std::shared_ptr指針。

std::shared_ptr 可以通過 get() 方法來獲取原始指針,通過 reset() 來減少一個引用計數,並通過get_count()來查看一個對象的引用計數。

std::unique_ptr 是一種獨佔的智能指針,它禁止其他智能指針與其共享同一個對象,從而保證代碼的安全:

std::weak_ptr是一種弱引用(相比較而言 std::shared_ptr 就是一種強引用)。弱引用不會引起引用計數增加

std::weak_ptr 沒有 * 運算符和 -> 運算符,所以不能夠對資源進行操作,它的唯一作用就是用於檢查 std::shared_ptr 是否存在,其 expired() 方法能在資源未被釋放時,會返回 true,否則返回 false。

體素濾波器,對每一個體素voxel,採用第一個point代替所有的points
VoxelFilter: Voxel filter for point clouds

一個軌跡線:多個傳感器
Collator:採集者,校對者,整理者,將多傳感器採集的數據歸併到軌跡上。

右手笛卡爾座標系繞x,y和z軸的旋轉分別叫做roll(翻滾角), pitch(俯仰角) 和 yaw(偏航角) 旋轉。
google採用的就是右手:roll, pitch, yaw.

繞x軸:θx 是 roll 角,和右手螺旋的方向相反(在yz平面順時針)
繞y軸:θy 是 pitch 角,和右手螺旋的方向相反(在zx平面順時針)。
繞z軸:θz 是yaw 角,和右手螺旋的方向相反(在xy平面順時針)。

reinterpret_cast的轉換格式:reinterpret_cast (expression) 允許將任何指針類型轉換爲指定的指針類型
reinterpret_cast<const char*>(uncompressed.data())

All coordinates are expressed in the right-handed Cartesian coordinate system
used by Cartographer (x forward, y left, z up). Message names are chosen to
mirror those used in the Eigen library.

std::min_element
std::max_element
std::accumulate
std::unique_ptr
std::forward
std::unique_lock
std::condition_variable
std::forward_as_tuple
std::bitset
std::unordered_set
std::forward_as_tuple

std::unordered_map內部元素是無序的,而std::map中的元素是按照二叉搜索樹存儲,進行中序遍歷會得到有序遍歷。
std::map中的元素默認按key值升序排序。一個map是一個鍵值對序列,即(key, value)對。它提供基於key的快速檢索能力,在一個map中key值是唯一的

emplace操作是C++11新特性,新引入的的三個成員emlace_front、empace 和 emplace_back,這些操作構造而不是拷貝元素到容器中,這些操作分別對應push_front、insert 和push_back,允許我們將元素放在容器頭部、一個指定的位置和容器尾部。
兩者的區別
當調用insert時,我們將元素類型的對象傳遞給insert,元素的對象被拷貝到容器中,而當我們使用emplace時,我們將參數傳遞元素類型的構造函,emplace使用這些參數在容器管理的內存空間中直接構造元素。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章