Я хочу, чтобы создать вектор {i, 0}
пар, где я от 0 до п - 1, используя функцию STL generate
и мой текущий код выглядит следующим образомСоздание вектора элементов пары с использованием STL в C++
std::vector<std::pair<int, int>> new_vertex(n);
int i = -1;
std::generate(new_vertex.begin(), new_vertex.end(), [&]{
i += 1;
return {i, 0};
});
Мой вопрос в том, что есть намного лучший/более холодный способ сделать это, используя функцию STL, например, используя transform
в некотором странном порядке, предпочтительно тот, который удаляет использование объявления переменной int i = -1
сверху?
С Эрик [Ranges библиотека] (https://github.com/ericniebler/range-v3), который должен в конечном итоге сделать свой путь в стандарт, вам может генерировать бесконечный список 0, 1, 2, ..., затем преобразовать их в {0, 0}, {1, 0}, {2, 0}, ..., затем взять первые n из них, или даже держать его как есть, и пусть все, что ему нужно, берет то, что ему нужно. – chris
Я думаю, что это хорошее решение. Использование [std :: transform()] (http://en.cppreference.com/w/cpp/algorithm/transform) требует итераций 'N', а также [std :: generate()] (http: // en .cppreference.com/ж/CPP/алгоритм/генерации). Таким образом, с точки зрения производительности, это то же самое. – Jens
Да, но я сомневаюсь, что кто-то одобрит это, это хорошая практика программирования. Подумайте об этом, я могу определить 'i' в любом месте, и его можно манипулировать 20 различными способами. перед выполнением 'generate'. Мой основной вопрос заключается в том, что, учитывая огромный размер стандарта C++, есть ли лучший/более безопасный способ, чем это? – suyash