嵌套循环以迭代到2的幂
Nested for loops to iterate to the power of 2
我需要使用两个循环,使外循环驱动内循环进行2、4、8、16和32次迭代的计算。
例如,如果i=2(对于外环)则内部循环将迭代4次
如果i=3则内部循环将迭代8次,依此类推
这就是我使用的逻辑
for ( i = 0 ; i < n ; i++ )
{
for ( c = 0 ; c <= pow(2,i) ; c=c++ )
如果有任何建议,我将不胜感激。
-
计算一次内部循环的迭代次数,然后重用它,而不是每次都计算。
-
不要使用
pow(2, i)
。使用更可靠的1 << i
。 -
不要使用
c = c++
。只需使用c++
。我不确定c = c++
是否保证是c = c+1
。
for ( i = 0 ; i < n ; i++ )
{
int nextCount = (1 << i);
for ( c = 0 ; c <= nextCount ; c++ )
您可以使用这样一个事实,即在C++中计算2的小幂,您可以使用左移位:
for ( i = 0 ; i < n ; i++ ) {
for ( c = 0 ; c < (1 << i) ; c++ ) {
...
}
}
这种"魔术"背后的原因与在十进制数字的右边加一个零会使数字乘以10的原因相同。
请注意,由于内部循环的迭代从零开始,因此需要使用<
,而不是<=
。否则,您将迭代2n+1次。
你会想使用其他人建议的东西:
for (int i=0 ; i<n ; i++){
for(int c=0 ; c < (1<<i) ; c++){
//do computations
}
}
您之所以要使用<
而不是<=
,是因为<=
实际上会给您(2^i)+1次迭代,因为计数为零。
之所以要使用位移运算1<<i
,是因为整数已经以2为底,在末尾加零等于重复乘以2。(1自动创建为整数,而1.0自动创建为浮点。使用浮点无法安全地执行此操作:1.0<<1位移位到1.70141e+38,如果您可以让编译器执行此操作的话。)
最后,您希望使用c++
,因为c++递增c,但返回原始值,所以您的内部for循环始终保持原始值,从不递增。
相关文章:
- 带过滤器的现代迭代c++集合
- 集合上的输出迭代器:assign和increment迭代器
- C++中的Constexpr迭代程序
- 为什么此代码的矢量迭代器没有停止?
- 在 C++ 自定义树的某些迭代后崩溃
- 此递归函数的每次迭代的值存储在哪里?
- 使用基于范围的循环迭代矢量时出现问题
- 访问要输出的矢量迭代器元素
- 为什么"i"在循环的每次迭代中都没有增加?(C++)
- 专门C++使用指针值类型的通用迭代器的模板函数?
- 如何仅在父循环的所有迭代都为真时才执行嵌套的 if 语句?
- c++ 上的矢量迭代器
- 容器类中的类迭代器
- 对于C字符串,是否有一个标准的C++迭代器
- 编译时二叉搜索树错误的反向迭代器表示"no matching function call for operator=()"
- 在for循环的某些迭代中,字符串的长度为0,而在其他迭代中则不为0
- 如何从高性能的输入迭代器返回变体?
- 如何实现构造函数,使其仅接受使用 typeid 的输入迭代器?
- 从 for 循环的每次迭代创建一个新变量
- 由迭代器构造的反向迭代器是否是其以前的迭代器?