带/不带星的循环内外的变量
Variables inside and outside a loop with/without asterix
我不精通C++但我正在将一个简短的脚本转换为PHP
for(auto it = First; it != Last; ++it)
{
Result += *it;
}
从这个片段中,我可以推测这仅仅是意味着
Result = Result + it
其中*
是对循环指针的引用。
也就是说,我看到这个符号在循环之外使用,在某些情况下,我看到在循环内外都没有这个符号的变量,这在我的理论中留下了漏洞。
我再次尝试RTFM,但我不确定我在寻找什么。
First
和Last
都是迭代器对象,表示标准库中指针C++泛化。此外,两个迭代器引用同一集合,并且可以通过递增迭代器*从First
访问Last
。
Result
是某种累加器。如果它是数字类型,则+=
表示Result = Result + *it
,其中*it
是迭代器指向的任何内容。换句话说,Result
在First
、包含和Last
、排他性之间累积集合的元素总数。如果First
指向数组的开头,Last
指向数字类型数组的末尾,则代码等效于在数组上调用 PHParray_sum()
。
但是,Result
不需要是数字。例如,它可以是一个std::string
,在这种情况下,+=
表示将值附加到字符串。
*就指针和数组而言,这将是"指向同一个数组"和"Last
指向数组的索引高于First
"。
我相信你的猜测是不正确的。
it
、first
和last
要么是迭代器,要么是指针器。迭代器是可用于迭代容器的C++对象。对于基本用法,它们的行为与指针非常相似,并且可以以相同的方式取消引用。
例如:
std::vector<int> myList;
...
// Search for the number 10 in the list.
std::vector<int>::iterator it = std::find(myList.begin(), myList.end(), 10);
// If the number 10 was found in the list, change the value to 11.
if (it != myList.end())
*it = 11; //< Similar to pointer syntax.
在您的特定示例中,Result
变量增加了一个值。若要获取该值,代码使用*
运算符从迭代器获取值。
相同的概念也适用于指针。 尽管迭代器和指针是非常不同的概念,但访问它们的值非常相似。
相关文章:
- 在循环中按顺序遍历成员变量
- 我可以创建一个包含两个变量的 for 循环,但时间复杂度仍然为 O(n) 吗?
- 与 for 循环中的变量混淆
- 如何在循环之外重新输入变量
- 如何使用将字符串拆分为 for 循环中的变量的程序
- 在变量声明中使用 for 循环
- C++ 和 Boost.Python - 如何将变量公开给 python 并在循环中更新它?
- C++ Code 在 for 循环期间不会累积变量中的总和,仅提供最终迭代值
- C++ 在循环中添加计数器变量并再次初始化其值
- (C++)虽然循环一次不起作用,但我引入了多个变量
- 如何添加循环期间分配的变量?
- C++,每个循环初始化一个新的静态变量
- 在 for 循环中更新两个变量时遇到问题C++
- 循环中的变量被设置为下一个数组的元素始终具有相同的内存地址?
- 需要循环帮助以迭代方式添加到程序集中的总和变量
- 在 c++ 中基于范围的 for 循环中使用引用作为控制变量
- 如何在循环中动态创建变量(c++)
- 变量循环范围会导致返回局部变量的地址引用
- ifstream变量循环不打印任何内容
- c++变量/循环问题