c++ - 保持数据迭代器的 vector

标签 c++ pointers c++11 vector iterator

我有一个功能:

void get_good_items(const std::vector<T>& data,std::vector<XXX>& good_items);

此函数应检查所有数据并找到满足条件的项目,并在 good_items 中返回它们所在的位置

用什么代替 std::vector<XXX> 最好?

  1. std::vector<size_t>包含所有好的索引。
  2. std::vector<T*>包含指向项目的指针。
  3. std::vector<std::vector<T>::iterator>包含项目的迭代器。
  4. 其他??

编辑:

我将如何处理 good_items ? 很多事情......其中之一是从 vector 中删除它们并将它们保存在其他地方。也许以后再做别的

编辑 2:

对我来说最重要的问题之一是如何访问 data 中的项目将很快取决于 good_items 的结构?

编辑 3:

我刚刚意识到我的想法是错误的。将原始指针(或智能指针)保留为 vector 的项不是更好吗,这样我就可以保留 vector 的实际值(指针)并且我不害怕大量复制,因为它们只是指针?

最佳答案

如果您从原始 vector 中删除项目,您列出的每一种方法都会有问题。

如果在原始 vector 中添加项,第二个和第三个就会有问题。如果您使用 push_back,第一个不会有问题。添加项目。

如果你不修改原始 vector ,所有这些都可以。

鉴于此,我建议使用 std::vector<size_t> .

关于c++ - 保持数据迭代器的 vector ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33675870/

相关文章:

c - 为什么我们要在通过 free() 释放内存后使指针无效?

c - 是否可以在不在结构中声明具体大小的情况下创建数组?

c++ - 使用 std::enable_if 保护复制构造函数

C++ std::locale ("en") 在 iOS 上抛出异常

c++ - 如何将 4 个 float 的 ps vector 转换为 4 个 double 并存储到 pd 数组?

c++ - 加载字体时 Allegro 5 崩溃

c++ - C++ 标准库是否比 winAPI 具有更多的环境依赖性?

c++ - 冷启动优化

pointers - 帮助破译几行 assembly 线

c++ - std::forward 无限递归大小效应