std::transform
- Использование унарный оператор
std::transform
применяет данную функцию к диапазону и сохраняет результат в другом диапазоне, начиная с d_first.
Via std::transform
и замыкание вы можете инициализировать std::vector
:
#include <algorithm>
#include <iostream>
#include <vector>
int main() {
std::vector<double> v(10);
const double step = 0.1;
std::transform(begin(v), end(v), begin(v),
[step](const double value) { return value + step; });
for (const auto value : v) {
std::cout << value << ' ';
}
}
std::generate
- Приращение через отзывной
Назначает каждый элемент в диапазоне [первый, последний) значение генерируется данный функциональный объект
Если вы хотите пользовательский инкремент, вы можете использовать std::generate
:
#include <algorithm>
#include <iostream>
#include <vector>
int main() {
std::vector<double> v(10);
double seed = 0.0;
std::generate(begin(v), end(v), [&seed]() {
const auto ret = seed;
seed += 0.1;
return ret;
});
for (const auto value : v) {
std::cout << value << ' ';
} // outputs: 0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9
}
std::iota
- Приращение через ++value
Немного не по теме. Вы можете указать тип с operator++
для приращения 0.1
, но он не является интуитивным для читателя.
Вы можете использовать std::iota
, который полагается на operator++
.
Заполняет диапазон [первый, последний] с последовательно увеличивающимися значениями, начиная со значения и повторяя оценку ++value
.
код в вашем случае будет:
#include <numeric>
#include <iostream>
#include <vector>
int main() {
std::vector<double> v(10);
std::iota(begin(v), end(v), 0.0);
for (const auto value : v) {
std::cout << value << ' ';
} // outputs: 0 1 2 3 4 5 6 7 8 9
}
'[h] (unsigned int xn)' -> '[h] (double xn)' – jpw
Вы хотите, чтобы изменить элементы? Или вы хотите добавить дополнительные преобразованные элементы? Или вы просто хотите заполнить вектор арифметической последовательностью? – Christophe
Это выглядит как работа для 'std :: generate'. –