在 C++ 中,迭代器,为什么有时我使用它有时使用 *it?
in c++, iterator, why sometime I use it and sometimes use *it?
这个用*it
int main ()
{
std::vector<int> myvector;
for (int i=1; i<=5; i++) myvector.push_back(i);
std::cout << "myvector contains:";
for (std::vector<int>::iterator it = myvector.begin() ; it != myvector.end(); ++it)
std::cout << ' ' << *it;
std::cout << '\n';
return 0;
}
这个就用了
for (std::map<char,int>::iterator it=mymap.begin(); it!=mymap.end(); ++it)
std::cout << it->first << " => " << it->second << '\n';
它们是等价的。 *it
取消引用迭代器,it->
做同样的事情。
我们可以将第二个例子重写为:
for (std::map<char,int>::iterator it=mymap.begin(); it!=mymap.end(); ++it)
std::cout << (*it).first << " => " << (*it).second << '\n';
// ^^^^^^ ^^^^^^
我认为 ->
运算符更简洁。无论如何,有些人总是使用 (*it)
。纯粹风格偏好。
语法 it->first
等同于 (*it).first
。无论哪种情况,您都在取消引用迭代器。
it
是指向 value(迭代器) 的指针
*it
是 值
阅读:understanding-iterators-in-STL
迭代器的语法是指针。因此,假设您在每个元素上都有一个指针。如果你有一个指向向量元素的指针 it
,你可以使用 *
运算符取消引用它并获取元素。指向地图元素的指针也是如此,它是一个 key/value 对。因此取消引用地图元素上的指针,您会得到 std::pair
。键可以通过it->first
或(*it).first
访问,值it->second
或(*it).second
.
for (std::map<char,int>::iterator it = mymap.begin(); it != mymap.end(); ++it)
std::cout << (*it).first << " => " << (*it).second << '\n';
或者更好地使用自动类型推导而不是显式地编写迭代器类型(如果你的编译器支持 C++11):
for (auto it = mymap.begin(); it != mymap.end(); ++it)
std::cout << (*it).first << " => " << (*it).second << '\n';
或者更好地使用新语法(C++11 起),因为它更清晰、更短:
for (const auto& elem: myvector)
std::cout << ' ' << elem;
for (const auto& elem: mymap)
std::cout << elem.first << " => " << elem.second << '\n';
这个用*it
int main ()
{
std::vector<int> myvector;
for (int i=1; i<=5; i++) myvector.push_back(i);
std::cout << "myvector contains:";
for (std::vector<int>::iterator it = myvector.begin() ; it != myvector.end(); ++it)
std::cout << ' ' << *it;
std::cout << '\n';
return 0;
}
这个就用了
for (std::map<char,int>::iterator it=mymap.begin(); it!=mymap.end(); ++it)
std::cout << it->first << " => " << it->second << '\n';
它们是等价的。 *it
取消引用迭代器,it->
做同样的事情。
我们可以将第二个例子重写为:
for (std::map<char,int>::iterator it=mymap.begin(); it!=mymap.end(); ++it)
std::cout << (*it).first << " => " << (*it).second << '\n';
// ^^^^^^ ^^^^^^
我认为 ->
运算符更简洁。无论如何,有些人总是使用 (*it)
。纯粹风格偏好。
语法 it->first
等同于 (*it).first
。无论哪种情况,您都在取消引用迭代器。
it
是指向 value(迭代器) 的指针
*it
是 值
阅读:understanding-iterators-in-STL
迭代器的语法是指针。因此,假设您在每个元素上都有一个指针。如果你有一个指向向量元素的指针 it
,你可以使用 *
运算符取消引用它并获取元素。指向地图元素的指针也是如此,它是一个 key/value 对。因此取消引用地图元素上的指针,您会得到 std::pair
。键可以通过it->first
或(*it).first
访问,值it->second
或(*it).second
.
for (std::map<char,int>::iterator it = mymap.begin(); it != mymap.end(); ++it)
std::cout << (*it).first << " => " << (*it).second << '\n';
或者更好地使用自动类型推导而不是显式地编写迭代器类型(如果你的编译器支持 C++11):
for (auto it = mymap.begin(); it != mymap.end(); ++it)
std::cout << (*it).first << " => " << (*it).second << '\n';
或者更好地使用新语法(C++11 起),因为它更清晰、更短:
for (const auto& elem: myvector)
std::cout << ' ' << elem;
for (const auto& elem: mymap)
std::cout << elem.first << " => " << elem.second << '\n';