c++ - 使用 size_t 索引以相反的顺序枚举数组

标签 c++ arrays indexing

假设我们需要以相反的顺序打印大小为 Nint 数组:

// Wrong, i is unsigned and always >= 0:
for(size_t i = N-1; i >= 0; --i){cout << data[i];}

// Correct, but uses int instead of size_t:
for(int i = N-1; i >= 0; --i){cout << data[i];}

// Correct, but requires additional operation in the loop:
for(size_t i = N; i > 0; --i){cout << data[i-1];}

// Probably the best version, but less readable.
// Is this well-defined behavior?
for(size_t i = N-1; i != (size_t)(-1); --i){cout << data[i];}

是否有更好的方法来使用 size_t 索引进行此类枚举并且无需在循环中进行额外操作?

假设 (size_t)0 - 1 给出 (size_t)(-1) 还是未定义是否有效?

最佳答案

您可以将减量移动到条件“之后”。

for(size_t i = N; i > 0;) {
    --i;
    cout << data[i];
}

它不像前向循环那么优雅,但它可以工作。我们在 0 处中断,所以 i 永远不会换行。

关于c++ - 使用 size_t 索引以相反的顺序枚举数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27224518/

相关文章:

arrays - 如何使用 Swift 4 获取数组中类项的索引?

swift - 从 allCases 获取枚举案例索引的通用函数

c++ - 为什么 C++ 为我的动态数组分配如此大的内存空间?

c++ - 关于 OpenGL 的问题和将 C 转换为 C++ 的过程

ios - 如何使用映射和过滤器从一维数组生成二维数组?

javascript - 如何将一个对象数组的属性获取到另一个对象数组

java - 我正在从文本文件中读取数组,然后我应该大写字母,计算每个名称的出现次数,然后显示所有信息。

database - SOLR - 索引数据库,配置

c++ - 声明静态可变值的正确方法是什么

c++ - 应用程序启动失败,因为未找到 cv210.dll”- 在其他计算机上运行应用程序的问题