是否可以使用類似generate_n
的東西來創建一個const vector
的隨機數字?我想不出一種方法來做到這一點,而無需派生vector
並在構造函數中進行賦值。如何初始化使用C++ 11的函數結果的常量向量?
17
A
回答
26
如果您願意,可以使用靜態助手或lambda表達式;如評論中指出的那樣移動語義/複製elision將使得這個相當便宜,因爲所有體面的編譯器都將省略助手返回的矢量的完整副本。相反,他們只會創建代碼來填充單個矢量,然後使用該矢量。
std::vector<int> Helper()
{
const size_t n = 10;
std::vector<int> x(n);
std::generate_n(x.begin(), n, someGenerator);
return x;
}
const std::vector<int> my_const_vec(Helper());
這裏是拉姆達版本:
const std::vector<int> my_const_vec([]()
{
const size_t n = 10;
std::vector<int> x(n);
std::generate_n(x.begin(), n, someGenerator);
return x;
}());
0
封裝你初始化成一個函數,聲明它「constexpr」,讓你可以用它來初始化一個常量表達式。
+3
這裏不需要'constexpr',因爲他不需要一個編譯時常量表達式(無論如何,它都不能使用'std :: vector'返回)。 – 2013-03-06 16:40:30
0
您可以使用std::transform
以及
vector<int> vec(10,1);
transform(vec.begin(), vec.end(), vec.begin(), func);
其中FUNC是:
int func(int i)
{
//return a random generated number
}
相關問題
- 1. 如何初始化pre-C++ 11語法中的向量向量?
- 2. C++函數指針向量的初始化列表11
- 3. 結構向量的C++初始化
- 4. 初始化向量異常
- 5. 初始化矢量爲零C++/C++ 11
- 6. 如何初始化對象在向量C++ 11
- 7. 使用數組的向量初始化
- 8. 如何在結構上初始化向量的向量?
- 9. C++初始化向量
- 10. C++向量初始化
- 11. C++向量初始化
- 12. 如何初始化向量
- 13. 初始化變量的函數C
- 14. 如何加快向量初始化C++
- 15. C++ 11線程安全函數局部靜態常量的初始化對象
- 16. 如何使用函數初始化靜態常量成員
- 17. C++ 11初始化類靜態常量數組
- 18. 如何使結構中的函數指針常量用於初始化常量數組?
- 19. C++並初始化常量變量
- 20. 初始化向量與變量,C++
- 21. C++類變量:初始化向量與
- 22. 用變量的值初始化常量
- 23. 如何初始化整數向量的向量?
- 24. 從C數組初始化ublas向量
- 25. 初始化向量數組
- 26. 如何初始化類的構造函數中的向量
- 27. 矢量初始化向量
- 28. 初始化向量
- 29. 向量初始化
- 30. 初始化向量
我知道你有這個答案了,但只是FYI''推導VECTOR'(或其他類型std'命名空間不是專門用於派生的)[風險](http://stackoverflow.com/questions/2034916/is-it-okay-to-inherit-implementation-from-stl-containers-rather-than-delegate ) – boycy 2013-03-06 13:41:55