这是与此问题相关的一个元问题:How do I write a branchless std::vector scan?。
最初提出的问题(强调我的):
我有
std::vector<int> data
;我想找到所有的数组 索引小于9并将它们添加到结果向量。
然后我将其编辑为:
我有一个
std::vector<int> data
,我希望找到所有元素 小于9并将它们添加到结果向量中。
然后另一位用户将其编辑为:
我有一个
std::vector<int> data
,我希望找到所有数组索引 元素小于9,并将它们添加到结果向量中。
我将其标记为主持人还原,说明:
我重写了这个问题(stackoverflow.com/posts/38798841/revisions) 主要目标是用“元素”替换“数组索引”,因为 这就是实际被问到的 - 并且指的是 在这种情况下,“索引/索引”会引起一些混乱。但是,用户 阿空加瓜推翻了我编辑的这个关键部分。这是我的信念 他的最新编辑应该回滚。
并且有理由拒绝了:
阿空加瓜的编辑是正确的;用户正在收集数组指标, 不是数组元素本身
。
现在,我不太明白主持人说的是什么 - “用户正在收集阵列标记”。我看到它的方式,索引是数组中元素的位置。例如,在C语言中:
char array[] = {'t', 'e', 's', 't'};
int index = 1;
char element = array[index];
printf('%c', element);
我根本不知道他将如何或为什么收集“指数”而不是“元素”。有人可以澄清一下这样我真的能理解吗?
答案 0 :(得分:7)
在链接问题顶部的示例代码中:
for (int i = 0; i < data.size(); ++i)
if (data[i] < 9)
r.push_back(i);
请注意,i
正在添加到向量中,不是 data[i]
。
i
是有趣元素的索引,是存储的内容,而不是data[i]
中存储的值,data
向量中的元素。