Любая встроенная функция для проверки, если 4 в [1,2,3,4] (вектор) - PullRequest
4 голосов
/ 23 августа 2009

В Ruby я могу сделать:

 [1,2,3,4].include?(4) #=>True

В Хаскеле я могу сделать:

4 `elem`   [1,2,3,4]   #=> True

Что мне делать в C ++?

Ответы [ 5 ]

20 голосов
/ 23 августа 2009

Вот пример использования find:

#include <iostream>
#include <vector>
#include <algorithm>

int main() {
        std::vector<int> Num(4);
        //insert values
        Num[0]=1;
        Num[1]=2;
        Num[2]=3;
        Num[3]=4;
        std::vector<int>::iterator p = find(Num.begin(), Num.end(), 4);
        if (p == Num.end())
           std::cout  << "Could not find 4 in the vector"  << std::endl;
        else
           std::cout  << "Have found 4 in the vector"  << std::endl;
        return 0;
}
8 голосов
/ 23 августа 2009

Нет встроенной функции, которая делает именно это. Есть std::find, который подходит близко, но так как он не возвращает bool, его немного неудобнее использовать.

Вы всегда можете бросить свой собственный, чтобы получить синтаксис, аналогичный предложению JIa3ep, но без использования count (который всегда пересекает всю последовательность):

template <typename iter_t>
bool contains(iter_t first, iter_t last, typename iter_t::value_type val){
    return find(first, last, val) != last;
}

Тогда вы можете просто сделать это, чтобы использовать его:

std::vector<int> x;

if (contains(x.begin(), x.end(), 4)) {...}
2 голосов
/ 23 августа 2009

Если вектор упорядочен, вы также можете использовать std :: binary_search.

std::binary_search(vec.begin(), vec.end(), 4)  // Returns true or false
1 голос
/ 23 августа 2009

Чтобы получить такой же синтаксис, как в вопросе ОП:

std::vector<int> x;

if ( count( x.begin(), x.end(), VAL_TO_FIND ) ) {
 // found
} else {
 // not found 
}
0 голосов
/ 23 августа 2009

Вы можете использовать std :: set У него есть метод find ().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...