简而言之,for(auto a : b) 只能读取b中的元素,但是无法修改。
for(auto &a : b)就可以对b中元素进行读写了。
比如:在写树时,有时用到结点指针数组
class Trie {
public:
Trie* next[26];
/** Initialize your data structure here. */
Trie() {
//下面这种操作并不能让next里面元素都为空指针
for (auto i : next)
{
i = nullptr;
}
/*上面的相当于下面的,i都是一个临时变量,只不过值为next的内容
for (Trie* i : next)
{
i = nullptr;
}
*/
}
};
正确做法:
class Trie {
public:
Trie* next[26];
/** Initialize your data structure here. */
Trie() {
//auto自动判断类型
for (auto& i : next)
{
i = nullptr;
}
/*上面的相当于下面的,只不过i的类型有亿点点复杂,它是引用类型,引用的是next里面的各个Trie指针
for (Trie*& i : next)
{
i = nullptr;
}
*/
}
};