私はそのようなコードを持っています:
typedef intptr_t ptr_t;
const int num_elements = 100;
ptr_t *pstr = (ptr_t *)malloc(sizeof(ptr_t) * num_elements);
std::array<ptr_t,num_elements> *parray = new (pstr) std::array<ptr_t,num_elements>;
要素 1 から num_elements-2 をシャッフルできるようにしたいので、std::shuffle を使用することを考えました。
auto s = parray->begin()++;
auto e = parray->end()--;
std::random_shuffle ( s, e );
これにはオーバーロードされた関数がないという苦情があります。自分が間違っていることを理解できないことに、本当に愚かだと感じています。どうすればこれを正しく行うことができますか?
編集:回答とフィードバックにより、に変更されました
auto s = parray->begin();
s++;
auto e = parray->end();
std::random_shuffle ( s, e );
ただし、「auto e」では次のようになります。「auto」は「int *」とは間接性のレベルが異なります