О, это легко. Существует нет 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>
Это скобки, а не скобки. –
Что вы делали до сих пор? –
Какой у вас код? Что не сработало? Вы пытались отладить? –