c++ - 基于 C++ 范围的循环——它们是如何工作的?
问题描述
在这个问题的开头,我会说我对 C 很了解,而且我正在学习 C++。
假设我有一个 std::string 对象,我想通过它的所有字符来验证它(例如,只允许 4 个字母)。
大约一周前,我看到for (type var : array)
在一些代码中使用它,但我不记得它是如何使用的。我想知道..这到底是如何工作的,为什么会起作用?逻辑上不应该。
AFAIK,数组并不真正“知道”它们的长度是多少。所以假设我有这个代码:
int arr[] = { 1, 2, 3 };
for (int item : arr) {
std::cout << item << std::endl;
}
鬼怎么for loop
知道什么时候停下来?数组只是从特定地址开始并继续分配的内存(在本例中为堆栈)。数组没有“存储长度”(AFAIK)。这就是为什么存储数组的长度是程序员的责任,for (int i = 0; i < [length]; i++)
但是这在某种程度上可行吗?
会喜欢一些解释。我的代码的特定用例:
std::string test = "Hello World!";
for (char letter : test) {
if (letter == 'l') {
std::cout << "'l' exists!" << std::endl;
} // result should be 3 prints.
}
解决方案
推荐阅读
- graphql - 在 TypeORM 与 GraphQL 的多对多关系上使用数据加载器,查询多对多
- python - 发布 Dialogflow JSON 服务帐户凭据的最佳实践
- mysql - 如何将 hh:mm:ss 转换为 sql 中的浮点数?
- flutter - 如何更改 Flutter Web 应用程序上的图标
- javascript - 如何将 2020-11-08T12:33:01.982826+01:00 之类的日期转换为 DD/MM/YY 或 2 天前或 4 小时前
- javascript - 未定义 java 脚本管理器
- python-3.x - 如何拖动无边框 Kivy 窗口
- flutter - Flutter workmanager:注册一个新的同名任务
- javascript - JavaScript:重试异步 readFile() 函数
- app-store-connect - 解决“您必须选择构建”。在 iTunes 中上传应用程序时