何时使用*而不是它来迭代矢量?

时间:2015-10-25 20:55:40

标签: c++ c++11 vector stl auto

我发现自己很困惑何时使用 * 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?
    }
}

3 个答案:

答案 0 :(得分:2)

基于范围的for循环遍历元素

for(auto e : x) {
    std::cout << e << std::endl;
}

beginend返回的迭代器是......好吧...... 迭代器
你必须取消引用它们才能获得一个元素:

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
}

将第二种方式视为第一种方式的简写。