Для набора (ов) СТЛ, кажется, что вы должны быть в состоянии сказать:Почему C++ нельзя установить итераторы в bool?
if(s.find(x)) {
//Something
}
в отличие от
if(s.find(x) != s.end()) {
//Something
}
Кроме того, если установить-итераторы может быть приведен к типу BOOL (истина если внутренний указатель не равен нулю), вы сможете. Почему у STAR нет итераторов этой простой функции? Было ли это намеренно опущено?
ПОЯСНЕНИЕ:
В качестве альтернативы, Сет может просто набор :: содержит (х) метод, который возвращает логическое значение непосредственно, но это, кажется, не будет реализовано либо. Я знаю, что это только пару символов, но в том случае, когда s является возвращаемое значение некоторой функции, это может быть неприятно из-за необходимости создания временной переменной, то есть (предположим, т имеет тип map<int,set<int>>
)
const set<int>& s = m[i];
return s.find(x) != s.end();
в отличие от
return m[i].contains(x);
или
return m[i].find(x);
EDIT:
Я не знал, что метод count() может использоваться как contains(). Проголосовал за закрытие, так как этот вопрос не правильно отражает то, что я действительно должен был спросить: У STL :: set есть метод «содержит»?
Зачем вам нужно писать 's.find (x)'? Итераторы - это позиции, и, похоже, нет веской причины, почему позиция имеет логическое состояние. –
Семантически, итераторы 'end' и' null' - это два разных понятия. – bcrist
@ DietmarKühl: То же самое можно сказать о указателях, но они могут быть неявно преобразованы в 'bool'! –