У меня есть код, например:Использование станда :: random_shuffle с станд :: массив
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, так что я думал использовать зЬй :: перетасовать.
auto s = parray->begin()++;
auto e = parray->end()--;
std::random_shuffle (s, e);
У меня есть жалоба, что для этого нет перегруженной функции. Я чувствую себя глупо в своей неспособности увидеть, что я делаю неправильно. Как мне это сделать правильно?
EDIT: из-за ответы и обратной связи, она изменилась в
auto s = parray->begin();
s++;
auto e = parray->end();
std::random_shuffle (s, e);
Однако, на «Авто е» я получаю: «авто» отличается уровней косвенности от 'междунар *
Я никогда не видел арифметику итератора, примененную к 'end()' before. Кроме того, вы хотите '' '' '' '', а не временный 'begin() '. – chrisaycock
Быстрое примечание: '++' и '--' не влияют на значения' s' и 'e', поскольку это происходит после назначения. Более того, это делается на временном, который затем быстро отбрасывается. – dasblinkenlight
Почему вы так усложняетесь? Просто используйте 'new []'. – zvrba