【发布时间】:2010-10-19 02:06:28
【问题描述】:
我有一个带有n 元素的std::vector。现在我需要将一个指向具有最后一个 n-1 元素的向量的指针传递给函数。
例如,我的vector<int> foo 包含(5,2,6,87,251)。一个函数接受vector<int>*,我想将一个指向(2,6,87,251)的指针传递给它。
我可以(安全地)获取迭代器++foo.begin(),将其转换为指针并将其传递给函数吗?还是使用&foo[1]?
更新:人们建议我将函数更改为采用迭代器而不是指针。这在我的情况下似乎是不可能的,因为我提到的函数是unordered_set<std::vector*> 的find 函数。那么在这种情况下,是否将n-1 元素从foo 复制到一个新向量中并使用指向该唯一选项的指针调用find?非常低效!这就像画家 Shlemiel,特别是因为我必须查询许多子集:最后一个 n-1,然后是 n-2 等元素,看看它们是否在 unordered_set 中。
【问题讨论】:
-
你能解释一下你真正想要做什么吗?我有点困惑 - 似乎您正在尝试使用 unordered_set 和 unordered_set::find() 做一些它们并不是真正设计用来做的事情(但我很可能只是不理解) .
-
你为什么首先使用向量来表示无序集?如果您正在执行多个成员资格查询,则有更有效的实现。您可能想要创建一个集合,然后对其进行查询。
-
我有一组已知序列。对于每个新序列,我必须快速找出它是否在 S 中。我意识到将已知序列存储为单独的向量并将指向它们的指针存储在 unordered_set 中是一种内存浪费,而 trie 会更好。但我想要恒定时间查找。
-
类似的情况是一组字符串指针。每个字符串实际上是一个字符向量。现在你有一个新的字符串 s 并且想用指向 s.substr(0), s.substr(1), ... 的指针重复调用 unordered_set::find()
-
那么你真的有一个向量,或者你有一个你想像向量一样对待的集合吗?
标签: c++ stl pointers vector iterator