О, это просто. Нет варианта find_if
/ replace_if
для изменения нескольких значений, но есть copy_if
.
Итак, учитывая наш вектор,
std::vector<std::string> v = { "text", "[[text", "text" };
мы можем выделить все элементы, которые мы хотим изменить:
std::vector<std::reference_wrapper<std::string>> v2;
std::copy_if(v.begin(), v.end(), std::back_inserter(v2), [](std::string const& s) { return s.compare(0, 2, "[[") == 0 && (s.size() < 2 || s.compare(s.size() - 2, 2, "]]")); } );
, а затем просто преобразуйте каждое из них в желаемое выходное значение:
std::for_each(v2.begin(), v2.end(), [](std::string& x) { return x += "]]"; });
Благодаря стандартным библиотечным алгоритмам мы можем легко проверить нашу работу:
std::for_each(v.begin(), v.end(), [](std::string const& x) { std::cout << x << std::endl; });
Просто убедитесь, что включены все необходимые заголовки.
#include <vector>
#include <string>
#include <iostream>
#include <functional>
#include <algorithm>