проверка, существует ли конкретный элемент в векторе c ++ STL - PullRequest
3 голосов
/ 14 декабря 2009

Я хотел проверить, существует ли элемент в определенном месте вектора, скажем, i, прежде чем обращаться к нему, как v [i]. Не могли бы вы дать мне знать, как я могу это сделать?

Спасибо.

Ответы [ 5 ]

9 голосов
/ 14 декабря 2009
if (0 <= i  &&  i < v.size()) {
  // OK
  std::cout << v[i]; // Example
} else {
  // Wrong
}
4 голосов
/ 15 декабря 2009

Элемент гарантированно существует в каждой позиции i, где i >= 0 и i < v.size(), поскольку векторы являются смежными последовательностями элементов, а "дыры" невозможны.

2 голосов
/ 14 декабря 2009

Использование v.size().

1 голос
/ 15 декабря 2009

Если вы хотите узнать, существует ли элемент в векторе, самый быстрый способ - отсортировать массив, а затем использовать метод поиска, такой как бинарный поиск.

Если это действие выполняется много раз, возможно, изменение структуры данных приведет к повышению производительности. Std :: map подходит для этого, и если у вашего компилятора есть такая, используйте хеш-таблицу или карту.

В противном случае единственный способ определить, существует ли значение в векторе без доступа к вектору, - это использовать вторую структуру данных для запоминания значения и положения.

0 голосов
/ 11 апреля 2011

Я понимаю, что у вас есть std::vector, предварительно выделенный в определенном измерении, скажем, n, и вы хотите увидеть, был ли элемент с индексом i (i < n) инициализирован или просто выделен.

Как сказал @Thomas Matthews, вы можете использовать вторую структуру данных, простую bool[n], в которой по индексу k вы сохраняете true, если элемент по индексу k в вашем vector существует и false в противном случае.

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

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