c++ - 检查 >=0 终止条件时的循环索引类型
问题描述
我需要通过一个字符串向后循环。
// std::string str assumed to be defined at this point
for (std::size_t i = str.length() - 1; i >= 0; i--) {
// perform some check on str[i]
}
问题描述
现在,如果我使用int i
循环索引,这是可行的,因为我最终将变为 -1 并且循环终止。将std::size_t i
(unsigned) 用于运行索引时,当“低于”零时它会变得非常大,因此循环不会终止,最终会导致分段错误。考虑到我想使用 std::size_t 作为循环索引类型,解决此问题的首选方法是什么,因为 std::string::length 返回 std::size_t,而不是 int。
可能的解决方案
for (std::size_t i = str.length(); i > 0; i--) {
// perform some check on str[i - 1]
}
我认为这真的很难看,因为我们将 i 用作不直观的“偏移” idx。什么是干净的解决方案?
解决方案
如果您不需要i
循环内部,则可以使用反向迭代器:
int main()
{
std::string s = "Hello, World!";
for (std::string::reverse_iterator i = s.rbegin(); i != s.rend(); ++i)
std::cout << *i;
}
推荐阅读
- python - 如何更改 Flask 中的路线?
- python-3.x - 如何使用请求 Python 从站点获得授权
- python-3.x - 用整数除浮点数
- android - ANDROID STUDIO 4.0 错误(开放阶段结束时没有进展)
- python - 在 Python 的 Pip 中,如何搜索与版本模式匹配的包的所有可能版本?
- javascript - 事件监听器和转换 JS
- c - 我需要使用 do/while 循环获得两个限制之间的值。当我在 while() 中放置两个条件时,代码会中断
- firebase - Streambuilder 帮助 Flutter Firebase 存储
- java - 角/弹簧靴| 错误:SyntaxError:“JSON.parse:JSON 数据的第 1 行第 1 列出现意外字符”
- linux - 让 apache 只读取一个 php 文件