在std::for_each中传递vector的位置
Pass vector position in std::for_each
我有一个稀疏压缩列格式的数据结构。
对于给定的算法,我需要遍历数据"列"中的所有值并做一堆事情。目前,使用常规的for循环可以很好地工作。老板想让我把这个重新编码为for_each循环,以便将来并行化。
对于那些不熟悉稀疏压缩列的人来说,它使用2(或3)个向量来表示数据。一个向量就是一长串值。第二个向量是每列起始位置的索引。
当前版本//用于处理第5列的数据矢量值;向量colIndex;向量rowIndex;
int column = 5;
for(int i = conIndex[5]; i != colIndex[6]; i++){
value = values[i];
row = rowIndex[i];
// do stuff
}
关键是我需要知道的位置(作为一个整数)在我的值列为了查找行位置(和一堆其他的东西,我懒得在这里列出)
如果我使用std::for_each()函数,我得到的是位置上的值,而不是位置。我需要位置本身。
有一个想法,显然效率不高,那就是创建一个与我的数据长度相同的整数向量。这样,我就可以将虚拟向量的迭代器传递给for_each中的函数,传递给函数的值就是位置。然而,这似乎是效率最低的方法。
任何想法吗?
我的挑战是我需要知道在向量中的位置。For_each接受一个迭代器,并将该迭代器的值发送给函数。使用boost::counting_iterator<int>
,或者自己实现。
的答案可能是最好的,但只有标准库提供的才有可能,尽管我认为速度很慢:
void your_loop_func(const T& val){
iterator it = values.find(val);
std::ptrdiff_t index = it - values.begin();
value = val;
row = rowIndices[index];
}
写完之后,我真的只能推荐Boost counting_iterator
版本。div;)
相关文章:
- 是STD :: Vector,由于其分配运算符移动其成员的位置,因此是一种非常规类型
- C++ 在 2D std::vector 中查找最大值的位置
- std::vector 在位置 iOffset 处更新 N 个值
- 调用std::vector::empty()时内存访问冲突读取位置
- 如何在 std::vector 中查找项目的位置
- 将 std::unique_ptr 移动到 std::vector 中的新位置
- c++在自制vector容器中的新位置
- 在char* vector中存储不同的值,数组中的所有位置都具有相同的值
- 获取元素在vector中的位置的索引
- C++:将 POD 添加到 std::vector <char>中的下一个位置
- c++ vector insert访问违反读取位置
- 将迭代器初始化为vector中的某个位置
- 元素在 std::vector 和 std::d eque 中的连续存储位置
- c++ push_back只向vector中的位置0添加对象
- 在std::for_each中传递vector的位置
- 是否可以安全地使用指向vector元素的指针来确定其在容器中的位置?
- 将std::vector分配给堆上特定内存位置的正确语法
- c++ vector访问违反读取位置
- 在c++中写入到vector中的特定位置
- 检查STL vector中某个位置的元素是否存在(已设置)