我已经习惯使用Python或Matlab,我可以创建一个列表:
min = 5;
step = 2;
max = 16;
Range = min:step:max;
和Range将是列表[5,7,9,11,13,15]。
在C ++中生成类似“Range”的列表是否有一种等效的简单方法?到目前为止,我能想到的最简单的事情是使用for循环,但这相当繁琐。
答案 0 :(得分:5)
C ++不会在语言或标准库中提供这样的东西。我写了一个函数模板,看起来(大致)像标准库中的东西,这个顺序是这样的:
namespace stdx {
template <class FwdIt, class T>
void iota_n(FwdIt b, size_t count, T val = T(), T step = T(1)) {
for (; count; --count, ++b, val += step)
*b = val;
}
}
从那里看起来像这样:
std::vector<int> numbers;
stdx::iota_n(std::back_inserter(numbers), 6, 5, 2);
答案 1 :(得分:2)
你必须自己实现,类似这样:
std::vector<int> createArray( int min, int max, int step )
{
std::vector<int> array;
for( int i = min; i < max; i += step )
{
array.push_back( i );
}
return array;
}
答案 2 :(得分:1)
为此,C ++中没有这样的预定义方法。 下面的代码可以帮助您。
std::vector<int> createArrayRange( int min, int max, int step )
{
std::vector<int> array;
for( int i = min; i < max; i += step )
{
array.push_back(i);
}
return array
}
或者这会相对更快。
void createArrayRange( std::vector<int>& array, int min, int max, int step )
{
for( int i = min; i < max; i += step )
{
array.push_back(i);
}
}
int main()
{
std::vector<int> array;
createArrayRange(array, min, max, step);
return 0;
}
答案 3 :(得分:1)
您可以使用std::generate
。
std::vector< int > createArray( int min, int max, int step )
{
std::vector< int > array((max-min)/step);
int n = min;
std::generate(array.begin(), array.end(),
[&]()
{
int res = n;
n+=step;
return res;
});
return array;
}
答案 4 :(得分:0)
不需要显式循环:
vector<int> data(6,2);
data[0] = 5;
std::partial_sum(data.begin(),data.end(),data.begin());