我有代碼作爲這樣:使用std :: random_shuffle用的std ::陣列
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 ::洗牌。
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);
然而,關於「汽車E」我得到:「自動」在間接的水平不同於「詮釋*」
我從來沒有見過將迭代器算法應用於'end()'之前。另外,你想''''''''而不是'begin()'的臨時。 – chrisaycock
快速提示:'++'和'--'對's'和'e'的值沒有影響,因爲它在賦值後發生。此外,它是在臨時完成的,然後立即丟棄。 – dasblinkenlight
你爲什麼這麼做很複雜?只需使用'new []'。 – zvrba