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

时间:2016-06-03 11:12:24

标签: c++

我不擅长C ++,但我正在将一个简短的脚本转换为PHP

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

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

Result = Result + it 

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

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

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

2 个答案:

答案 0 :(得分:1)

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

Result是某种累加器。如果它是数字类型,+=表示Result = Result + *it,其中*it是迭代器指向的任何内容。换句话说,Result First,包括{和Last之间累积集合的元素总数。如果First指向数组的开头且Last指向数字类型数组的一端,那么您的代码将等同于调用PHP array_sum()阵列。

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

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

答案 1 :(得分:0)

我相信你的推测是错误的。

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变量添加了一个值。要获得该值,您的代码将使用*运算符从迭代器中获取值。

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