我不擅长C ++,但我正在将一个简短的脚本转换为PHP
for(auto it = First; it != Last; ++it)
{
Result += *it;
}
从这个片段中,我可以推测这只是意味着
Result = Result + it
其中*
是对循环指针的引用。
那说我看到这个符号在循环之外使用,在某些情况下,我看到在循环内外都没有这个符号的变量,这在我的理论中存在漏洞。
我再次尝试RTFM,但我不确定我在寻找什么。
答案 0 :(得分:1)
First
和Last
都是迭代器对象,表示C ++标准库中指针的泛化。此外,两个迭代器引用相同的集合,并且可以通过递增迭代器 * 从Last
到达First
。
Result
是某种累加器。如果它是数字类型,+=
表示Result = Result + *it
,其中*it
是迭代器指向的任何内容。换句话说,Result
在First
,包括{和Last
之间累积集合的元素总数。如果First
指向数组的开头且Last
指向数字类型数组的一端,那么您的代码将等同于调用PHP array_sum()
阵列。
但是,Result
不需要是数字。例如,它可以是std::string
,在这种情况下+=
表示将值附加到字符串。
* 就指针和数组而言,这将“指向同一个数组”,而“Last
指向的数组索引高于First
。 “
答案 1 :(得分:0)
我相信你的推测是错误的。
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
变量添加了一个值。要获得该值,您的代码将使用*
运算符从迭代器中获取值。
同样的概念适用于指针。虽然迭代器和指针是非常不同的概念,但访问它们的值非常相似。