Когда вы говорите без цикла, вы имеете в виду без рукописного цикла, потому что алгоритмы используют циклы в своей реализации.
Как вы можете найти для отдельной строки, вы можете сделать что-то с vec.begin ()vec.end () str.find и, возможно, немного boost :: bind.
Не уверен, что вы хотите делать со всеми этими находками.Примерно так:
std::vector< std::string::size_type > locations;
locations.reserve( vec.size() );
std::transform( vec.begin(), vec.end(), std::back_inserter(locations), boost::bind( &std::string::find, str, _1 ) );
сгенерирует для вас вектор позиции, где были найдены эти предметы.Вы можете написать свой собственный функтор, если хотите что-то более продвинутое, например, сохранять состояние, хотя если код действительно усложняется, я не вижу смысла избегать цикла.