我想初始化指標陣列。(不是普通陣列)但這不起作用。
int* arr = new int [5];
arr = {1,2,3,4,5};
我也不想這樣做:(因為如果大小改變我必須改變代碼)
arr[0] = 1; arr[1] = 2; ...
是否有捷徑可尋?矩陣呢?
int** mat = ...
mat = { {1,2} , {3,4} }
而且我也不希望像這樣初始化:(因為當我想將矩陣傳遞給函式時有一些限制(例如:如果大小發生變化,我必須更改函式定義))
int mat[2][2] = { {1,2} , {3,4} };
uj5u.com熱心網友回復:
你可以寫例如
int* arr = new int [5] { 1, 2, 3, 4, 5 };
或者,例如,你可以使用演算法std::iota像
int* arr = new int [5];
std::iota( arr, arr 5, 1 );
或其他一些演算法,例如std::fill或std::generate。
如果陣列將被重新分配,那么在這種情況下最好使用標準容器std::vector<int>。
(例如:如果大小改變,我必須改變函式定義))
您可以將該函式定義為模板函式,其中陣列的大小將是模板非型別引數。
uj5u.com熱心網友回復:
如果您真的想自己動態創建一個陣列,那么請按照莫斯科的@Vlad 的建議進行操作:
int* arr = new int [5] {1, 2, 3, 4, 5};
或者:
int* arr = new int [5];
std::iota( arr, arr 5, 1 ); // also std::fill or std::generate
但是,在 99% 的情況下,使用std::vector幾乎在各個方面都更好。
您的代碼如下所示:
std::vector<int> arr{1, 2, 3, 4, 5};
// if you know the size of the array at runtime, then do this
arr.resize(5 /* size of the array at runtime */)
更好的是,如果您在編譯時知道陣列的大小,那么它std::array就是您最好的朋友。
std::array<int, 5 /* size of the array at compile time */> arr{1, 2, 3, 4, 5};
uj5u.com熱心網友回復:
這是一個使用 std::make_unique 來避免新建/洗掉的示例。但是,如您所見,必須手動維護陣列大小。所以你最好使用 std::vector 或 std::array
#include <algorithm>
#include <iostream>
#include <memory>
// allocate with make_unqiue and initialize from list
template<typename type_t, std::size_t N>
auto make_array(const type_t (&values)[N])
{
std::unique_ptr<type_t[]> array_ptr = std::make_unique<type_t[]>(N);
for (std::size_t n = 0; n < N; n) array_ptr[n] = values[n];
return array_ptr;
}
int main()
{
auto array_ptr = make_array({ 1,2,3,4,5 });
for (std::size_t n = 0; n < 5; n)
{
std::cout << array_ptr[n] << " ";
}
// std::unique_ptr will take care of deleting the memory
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/336676.html
下一篇:過濾包含日期的陣列
