std*_*ave -1 c++ stl std c++11
我有这样的代码:
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>;
Run Code Online (Sandbox Code Playgroud)
我希望能够将元素1洗牌到num_elements-2,所以我想使用std :: shuffle.
auto s = parray->begin()++;
auto e = parray->end()--;
std::random_shuffle ( s, e );
Run Code Online (Sandbox Code Playgroud)
我得到一个投诉,没有重载功能.我觉得自己无法看到自己做错了什么,我感到非常愚蠢.我该怎么做?
编辑:由于答案和反馈,它已改为
auto s = parray->begin();
s++;
auto e = parray->end();
std::random_shuffle ( s, e );
Run Code Online (Sandbox Code Playgroud)
但是,在'auto e'上我得到:'auto'的间接级别与'int*'不同
回答你的直接问题:我相信你的错误是使用后增量运算符,它在递增之前返回它们的原始值.由于std::array迭代器基本上都是指针,请尝试
auto s = parray->begin() + 1;
auto e = parray->end() - 1;
Run Code Online (Sandbox Code Playgroud)
编辑:现在,其余的.为什么你这样做呢?您是否考虑
std::vector<int> arr(100)过创建包含100个元素的动态数组?它有类似的功能,没有指针的所有直接操作?
编辑2:阅读完你的评论之后,我意识到问题在于你试图将你作为指针给出的数组洗牌.在这种情况下,我根本不会做新的展示位置.假设你有指针pstr,这应该工作.
std::random_shuffle(pstr +1, pstr + num_elements - 1);
Run Code Online (Sandbox Code Playgroud)
这是有效的,因为为了算法库的目的,数组中的简单指针将作为随机访问迭代器.
| 归档时间: |
|
| 查看次数: |
781 次 |
| 最近记录: |