检查c ++ STL向量中是否存在特定元素

时间:2009-12-14 18:52:54

标签: c++ stdvector

我想检查一个元素是否存在于特定的向量位置,例如i,然后像v [i]一样访问它。你能让我知道我该怎么办?

谢谢。

5 个答案:

答案 0 :(得分:9)

if (0 <= i  &&  i < v.size()) {
  // OK
  std::cout << v[i]; // Example
} else {
  // Wrong
}

答案 1 :(得分:4)

保证元素存在于i的每个位置i >= 0i < v.size(),因为向量是连续的元素序列,而“洞”是不可能的。

答案 2 :(得分:2)

使用v.size()

答案 3 :(得分:1)

如果你想知道一个元素是否存在于一个向量中,最快的方法是对数组进行排序,然后使用搜索方法,如二进制搜索。

如果多次执行此操作,则更改数据结构可能会产生更好的性能。 std :: map对此很好,如果您的编译器有一个,请使用哈希表或映射。

否则,在不访问向量的情况下确定向量中是否存在值的唯一方法是使用第二个数据结构来记住值和位置。

答案 4 :(得分:0)

我们了解到您在特定维度预先分配了std::vector,比方说n,您想查看索引ii < n)处的元素是否为初始化或刚刚分配。

像@Thomas Matthews所说,你可以使用第二个数据结构,一个简单的bool[n],其中,在索引k,如果索引为{true,则存储k 1}}在vector存在且false存在。

      0 1 2 3 4 5
v = [ *   *   * * ]

             0     1      2     3     4     5
exists = [ true, false, true, false, true, true ]