Я надеюсь, что все в порядке, чтобы добавить ответ в стиле «обновление», для будущих читателей, у которых может возникнуть тот же вопрос. Пожалуйста, дайте мне знать, так как я здесь новенький.
Итак, вот моя последняя переработанная форма кода, которая делает то, что я хочу:
#include <iostream>
#include <vector>
#include <algorithm>
//Overwrite a vector<int> with incrementing values, base-n.
void init_integers(std::vector<int>& ints, int base) {
int index{ base };
std::generate(ints.begin(), ints.end(), [&index]() {
return index++; //post-incr.
});
}
//Default wrapper to overwrite a vector<int>
// with incrementing values, base-0.
void init_integers(std::vector<int>& ints) {
init_integers(ints, 0);
}
//Test lambda-based vector<int> initialization.
int main() {
std::vector<int> indices( 50 );
init_integers(indices);
//test output loaded indices.
for (auto x : indices) {
std::cout << x << std::endl;
}
}
Спасибо за полезные ответы, я считаю, что это намного проще. Вполне вероятно, что теперь я буду использовать лямбда-выражения для алгоритмов, которые принимают объект функции!
Обновление 2:
На основании комментария ildjarn к оригинальному сообщению выше:
«Обратите внимание, что точная функциональность здесь реализована с помощью нового алгоритма C ++ 0x - std :: iota.»
После тестирования я изменил соответствующий код:
...
#include <numeric>
//Overwrite a vector<int> with incrementing values, base-n.
void init_integers(std::vector<int>& ints, int base) {
std::iota(ints.begin(), ints.end(), base);
}
...
и работает нормально. ("Йота", с26.7.6, из N3242).
Чем проще и чище (хотя и немного непонятно), тем легче читать и, что более важно, поддерживать.
Спасибо, ildjarn! (Хотя лично мне было полезно пройти через этот процесс, чтобы узнать больше о лямбдах на C ++ 0x!) :)
-Буд Алверсон