Как стать автором
Обновить

Комментарии 13

Хм. Как-то сразу вспоминается Objective C с его категориями, позволяющими добавить метод к уже существующему классу.

НЛО прилетело и опубликовало эту надпись здесь
Вы должны помнить, что эти новые строковые функции чувствительны к регистру. … вам все равно нужно будет реализовать это самостоятельно. Возможные реализации contains(), startwith() и endwith(), которые выполняют поиск без учета регистра, показаны ниже:

...return std::toupper(ch1) == std::toupper(ch2); });...

А еще стоит помнить, что std::toupper не работает с юникодом и реализовывать самостоятельно придется еще много чего.

Поэтому, видимо, и не добавляли — если проект хоть немного сложнее «hello, world», от велосипедостроения все равно никуда не деться.

Надо было ещё добавить в C++11 или даже 98. Хорошо, что в Qt всегда было и остаётся гораздо удобнее.

а потом люди пишут код а-ля:
if (m.contains(x))
    m[x] = foo();

Это задача компилятора понять что в обоих случаях используется один и тот же итератор и удалить второй вызов.

в общем случае эти итераторы могут быть вычислены по-разному. И даже если бы мы могли гарантировать единообразность их вычисления, всё равно потребуется механизм чистых функций и весьма нетривиальный алгоритм решения этой задачи в общем случае.

На самом деле элиминация повторного доступа это весьма развитая оптимизация. Если добавить к этому то, что приведённый пример легче читается чем

auto ptr = m.find(x);
if(ptr != m.end())
    *ptr = foo();

и тот факт что в 99.9% случаев производительность этого куска особой роли не играет — я бы такой код на ревью пропустил.
НЛО прилетело и опубликовало эту надпись здесь
Еще покажите простую простую функцию для преобразования строки из utf8 в cp1251 и подобные.
И как заставить iostream правильно работать с русскими путями:
std::ofstream out(std::filesystem::path(u8"у черта на рогах\\file.txt"));
простую функцию для преобразования строки из utf8 в cp1251 и подобные
В текущем стандарте такого нет, но в будущем добавят (через 3-6 лет)
if (m.count(key) > 0)

тоже вариант. работает и для set и для map.
Можно просто
if (m.count(key))
Так ещё меньше различий. Думаю поэтому и не спешили добавлять contains в стандарт.
Зарегистрируйтесь на Хабре, чтобы оставить комментарий