我发现自己很困惑何时使用 * it 而不是它来迭代std :: vector。是否有任何规则(或简单的记忆方式)我可以考虑到这一点,以免混淆这两种迭代stl集合的方式?
#include <iostream>
#include <string>
#include <vector>
using namespace std;
int main(){
std::vector<int> x;
x.push_back(3);
x.push_back(5);
for(auto it : x){
std::cout<<it<<std::endl; // Why to use it here and not *it?
}
for( auto it= x.begin(); it!=x.end(); ++it){
std::cout<<*it<<std::endl; // Why to use *it here and not it?
}
}
答案 0 :(得分:2)
基于范围的for
循环遍历元素:
for(auto e : x) {
std::cout << e << std::endl;
}
begin
和end
返回的迭代器是......好吧...... 迭代器。
你必须取消引用它们才能获得一个元素:
for( auto it = x.begin(); it != x.end(); ++it) {
std::cout << *it << std::endl;
}
答案 1 :(得分:1)
当it
是迭代器时,*it
给出迭代器对应的值。更好的是,只需使用 range-for 循环:
for (auto& element : vector) {
// `element` is the value inside the vector
}
答案 2 :(得分:1)
请参阅以下两种迭代方式:
for (auto it = begin(list) ; it != end(list) ; it++) {
auto element = *it;
// do stuff with element
}
for (auto element : list) {
// do stuff with element
}
将第二种方式视为第一种方式的简写。