带/不带星的循环内外的变量

Variables inside and outside a loop with/without asterix

本文关键字:变量 循环      更新时间:2023-10-16

我不精通C++但我正在将一个简短的脚本转换为PHP

for(auto it = First; it != Last; ++it)
{
Result += *it;
}

从这个片段中,我可以推测这仅仅是意味着

Result = Result + it 

其中*是对循环指针的引用。

也就是说,我看到这个符号在循环之外使用,在某些情况下,我看到在循环内外都没有这个符号的变量,这在我的理论中留下了漏洞。

我再次尝试RTFM,但我不确定我在寻找什么。

FirstLast都是迭代器对象,表示标准库中指针C++泛化。此外,两个迭代器引用同一集合,并且可以通过递增迭代器*First访问Last

Result是某种累加器。如果它是数字类型,则+=表示Result = Result + *it,其中*it是迭代器指向的任何内容。换句话说,ResultFirst、包含和Last、排他性之间累积集合的元素总数。如果First指向数组的开头,Last指向数字类型数组的末尾,则代码等效于在数组上调用 PHParray_sum()

但是,Result不需要是数字。例如,它可以是一个std::string,在这种情况下,+=表示将值附加到字符串。

*就指针和数组而言,这将是"指向同一个数组"和"Last指向数组的索引高于First"。

我相信你的猜测是不正确的。

itfirstlast要么是迭代器,要么是指针器。迭代器是可用于迭代容器的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变量增加了一个值。若要获取该值,代码使用*运算符从迭代器获取值。

相同的概念也适用于指针。 尽管迭代器和指针是非常不同的概念,但访问它们的值非常相似。