下面的代碼可以縮短嗎?
size_t n_arr{4};
int arr[4]{1, 4, 5, 6};
int* arr_p[4];
for (; n_arr—; )
arr_p[i] = &arr[i];
地址都鏈接在一起,那么有沒有更有效的方法來獲取地址塊并將它們存盤在另一個陣列中?
uj5u.com熱心網友回復:
你可以做
#include <numeric>
...
std::iota(std::begin(arr_p), std::end(arr_p), arr);
wherestd::iota通常用于生成整數的順序范圍,它是通用的,因此生成從arr(本身是 的縮寫&arr[0])開始的指標的順序范圍。
更明確地說,
#include <algorithm>
...
std::transform(std::begin(arr), std::end(arr), arr_p, [](int& x) { return &x; });
它通過參考獲取每個元素并填充arr_p指向這些元素的指標。
https://godbolt.org/z/T8KGshn68
uj5u.com熱心網友回復:
我想你可以這樣寫:
size_t n_arr{4};
int arr[4]{1, 4, 5, 6};
int* arr_p[4];
int *narr_p;
int **arr_pp;
narr_p = arr;
arr_pp = arr_p;
for (; n_arr--; )
*arr_pp = narr_p ;
但正如 Yksisarvinen 所寫,擁有一個順序指標陣列似乎不是很有用。
編輯:一個稍微優雅的公式(在我看來):
size_t n_arr{4};
int arr[4]{1, 4, 5, 6};
int* arr_p[4];
for (int **arr_pp = arr_p, *narr_p = arr; n_arr--; )
*arr_pp = narr_p ;
還有第三個:
size_t n_arr{4};
int arr[4]{1, 4, 5, 6};
int* arr_p[4];
for (int **arr_pp = arr_p, *narr_p = arr; n_arr--; *arr_pp = narr_p );
uj5u.com熱心網友回復:
size_t n_arr{4};
int* arr_p[4]=&n_arr[4]{1, 4, 5, 6};
我相信這會奏效。不完全確定。:D
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/376779.html
上一篇:從命令列創建引數并保存在陣列中
