#c #c 17
#c #c 17
Вопрос:
Я хочу использовать std::fill
функцию из библиотеки алгоритмов для заполнения ‘-‘ во второй части пары. Возможно ли это достичь?
#include <algorithm>
#include <map>
int main()
{
std::map<int, unsigned char> board(10);
// What I want the std::fill to do the equivalent of
for (autoamp; cell : board) {
cell.second = '-';
}
// What I've tried:
std::fill(board.begin(), board.end(), [amp;](auto amp;pair){pair.second = '-';});
}
Ответ №1:
fill
присваивается каждому элементу диапазона, для которого он вызывается, в то время как вы хотите присвоить значения этим элементам (пары ключ-значение). Начиная с C 20, вы можете использовать адаптер ranges::views::values
диапазона:
std::ranges::fill(std::ranges::views::values(board), '-');
Если вы не можете использовать C 20, ваш код будет работать, изменившись fill
на for_each
:
std::for_each(board.begin(), board.end(), [amp;](auto amp;pair){pair.second = '-';});
Комментарии:
1. Большое спасибо за ваш ответ! Нужно ли добавлять какие-либо включения?
2.
std::for_each
<algorithm>
включен, который вы уже включаете. Доступны возможности диапазонов<ranges>
, если они доступны.3. Я попытался поместить Visual Studio 2019 в последнюю версию C , я не думаю, что он ее еще поддерживает, но std::for_each великолепен! Большое спасибо!