1. 程式人生 > >c++如何構造一個遞增的vector陣列

c++如何構造一個遞增的vector陣列

原生陣列和vector、array都不支援構造一個遞增的陣列,比如一個包含0~999的size為1000的陣列。

傳統的方式是:

int ids[COUNT] = {};
for (int i = 0; i < COUNT; ++i)
{
	ids[i] = i;
}

std::vector<int> ids;
ids.resize(COUNT);
for (int i = 0; i < COUNT; ++i)
{
	ids[i] = i;
}

多麼冗長的一段程式碼。

相比之下,用python來實現這樣類似的一個功能則簡單至極:

ids = [i for i in range(0, COUNT)]

不過好在c++11有了lambda,右值引用,所以還是可以用一句程式碼就實現這個“構造”過程的,參考程式碼如下:

std::vector<int> ids = []() {std::vector<int> v; v.resize(COUNT); for (int i = 0; i < COUNT; ++i) v[i] = i; return v; }();

怎麼說呢,長是長了點,但是好歹一行就完成了,不難看出,其基本思路就是使用lambda的返回值對vector進行初始化,而在lambda中完成對遞增陣列的構造,並在最終“賦值”(這種寫法其實是初始化啦)給ids的時候,其實是呼叫了vector的移動建構函式,所以效能並沒有多少損耗(c++11之前就不一樣了)。實際測試下來COUNT達到億級別的時候,相比於傳統方式效能損耗在10%以內。