не очень тоже, но должны также получить работу:
int cur = 0;
std::vector<std::string> blockPathList(blockNum);
std::generate(blockPathList.begin(), blockPathList.end(),
[&](){ return destPath + "part" + std::to_string(cur++); });
К сожалению, это
- Требуется вектор быть предварительно размером
- Требуется внешнюю переменную итерации (поскольку
std::generate
Generator
не принимает никаких аргументов
Вы можете также использовать std::for_each
:
std::vector<int> nums(blockNum);
std::iota(nums.begin(), nums.end(), 0);
std::for_each(nums.begin(), nums.end(), [&](int c) {
blockPathList.push_back(destPath + "part" + std::to_string(c));
});
но опять-таки это изуродованный, потому что std::iota
не генерирует диапазоны. Он заполняет существующий диапазон итератором, а не действует как числовой итератор в себе (конечно, вы можете решить это путем реализации или использования чего-то, что генерирует эти итераторы)
Что такое 'blockNum' и' desPath'? –
Похоже, вы превращаете 1 тип списка (вектор) в другой. Это похоже на работу для функции «map», которую я уверен, что C++ имеет. – Carcigenicate
@VincentSavard 'blockNum' - это просто int, а' desPath' - 'string' – chenzhongpu