【发布时间】:2016-02-14 00:55:45
【问题描述】:
我有一个功能:
void get_good_items(const std::vector<T>& data,std::vector<XXX>& good_items);
此函数应检查所有数据并找到满足条件的项目并在 good_items 中返回它们在哪里。
什么是最好的而不是std::vector<XXX>?
-
std::vector<size_t>包含所有好的索引。 -
std::vector<T*>包含指向项目的指针。 -
std::vector<std::vector<T>::iterator>包含项目的迭代器。 - 其他??
编辑:
我将如何处理good_items?
很多事情......其中之一是从向量中删除它们并将它们保存在其他地方。以后可能会有别的东西
编辑 2:
对我来说最重要的一个是如何根据good_items 的结构快速访问data 中的项目?
编辑 3:
我刚刚意识到我的想法是错误的。将原始指针(或智能)保留为向量的项不是更好,这样我就可以保留向量的真实值(即指针)并且我不怕繁重的复制,因为它们只是指针?
【问题讨论】:
-
你会只在调用函数中使用结果,还是尝试存储它以便再次使用它(在向量可能已经改变之后)?任何其他代码(可能在不同的线程中)是否会修改
get_good_items和您使用结果之间的向量? -
现在让我们不用担心线程安全
-
如果数据向量被修改(从其中删除元素,将其从一个内存范围移动到另一个内存范围等),引用将中断。在这种情况下,您可以将好项目从数据复制到 good_items。如果不修改数据向量,您可以轻松地存储指向项目的指针(因此 2 将是可行的方法,因为 omho 更容易处理并且更具可读性)。
-
@rbaleksandar 如果在我想解雇 good_items 之前没有发生任何变化?
-
如果
data使用存储在good_items中的引用保留在内存中的位置,则从data删除项目不会有问题。但是,如果您将data移动到其他位置内存或例如通过直接访问data而不是通过存储在good_items中的引用来删除项目,您将获得一个或多个损坏的引用,因为存储在good_items中的指针将指向内存中不再包含的位置适当的内容(因为您已经删除了该项目)。这通常适用于使用指针时,而不仅适用于您的情况
标签: c++ pointers c++11 vector iterator