是否有一种简单/优雅的方法将整数范围压入STD向量?
Is there a simple / elegant way to push a Range of integers to an STD vector?
我有一个简单的任务,就是用一组整数初始化一个std::vector<int>
。
范围由用户给出,我尽量避免使用for
循环。
类似:
void addRange(std::vector<int>& vReturn, int nStart, int nEnd)
{
vReturn.clear();
// straightforward solution
for (int nInteger = nStart; nInteger <= nEnd; nInteger++)
{
vReturn.push_back(nInteger);
}
//////////////////////////////////////////////
// Elegent Pseudo-Code
vReturn.add_range(nStart, nEnd); // <<- is this doable?
}
您可以在c++ 11中使用iota算法完成此操作。
vReturn.clear();
vReturn.resize((nEnd - nStart) + 1);
std::iota(vReturn.begin(), vReturn.end(), nStart);
也可以使用boost:: range
auto range = boost::irange<int>(nStart, nEnd + 1);
vReturn.assign(range.begin(), range.end());
我有一个替代的解决方案,它不使用for循环,不使用boost或c++ 11
#include <iostream>
#include <vector>
using namespace std;
struct Add{
void operator()(int x, int y, vector<int>& vec)
{
if(x > y)
return;
vec.push_back(x);
operator()(++x, y, vec);
}
};
void addRange(std::vector<int>& vReturn, const int nStart, const int nEnd)
{
vReturn.resize(nEnd - nStart);
vReturn.clear();
Add()(nStart, nEnd, vReturn); //update the vector using Functor object
}
int main()
{
vector<int> vec;
int start = 1, end = 10;
addRange(vec, start , end);
return 0;
}
相关文章:
- 将超出范围的整数分配给有符号字符类型
- 如何仅使用 While 循环在给定范围内找到可被 7 整除的计数整数
- 如果变量数据包含大于 vector 所有元素的整数,则仅在视觉工作室上接收"矢量下标超出范围"?
- 当我尝试将范围值存储为 8 位的固定宽度整数时,它向我显示一些其他值 [ASCII]
- 将整数范围映射到另一个范围
- 您如何找到 l 到 r 范围内所有整数的 XOR,其中 -(10^18) <= l,r <= 10^18?
- 为什么按位运算符在使用与整数中提供的位数相同的位数计算可能的最大范围时会产生错误
- 在基于范围的循环范围内的双/整数使用和数据缩小
- 什么是N位签名整数的最大保证范围
- 随机选择 2 个不在范围内的整数
- C++标准强加的整数范围
- 为什么所有可能的整数都"true"在 C++ 的 if 语句内的 long int 范围内,而 0 不是?
- 随机整数仍在生成低于或高于范围的数字?
- 在某些范围更新后获取整数数组的最终状态的有效算法是什么?
- 将无符号整数加法/减法括在一个范围周围
- 以下程序中最大 int 1000 000(在 int 范围内)的整数溢出
- 如何在给定的范围内找到整数的个数是偶数
- 测试整数是否在范围内时,逻辑错误和不正确输出
- 如何编写一个 boost::spirit::qi 解析器来解析从 0 到 std::numeric_limits:<int>:max() 的整数范围?
- 编写一个程序,该程序在0-99范围内生成10000个随机整数,并从随机数据中产生直方图