2

このコードでは、反復子を 10 要素分移動しようとしています。

   #include <iostream>
    #include <string>
    #include <vector>
    int main()
    {
        using namespace std;
       vector<int> v(20);
       auto mid = v.begin() + 10;
        cout<<mid;


    }

このコードを実行すると、タイトルに記載されているエラーが発生します。私は初心者です。私が書いたほぼすべてのプログラムでこのエラーが発生します。どこが間違っていますか?

4

1 に答える 1

3

イテレータは要素を「ポイント」します。やりたいことは次のとおりです。

cout << *mid;

イテレータが指すものを出力するには、イテレータを「逆参照」する必要があります。直接印刷しようとすると、あなたが言及したエラーが発生します。

編集:ここに小さなデモがあります:

#include <iostream>
#include <vector>

int main(int argc, char* argv[])
{
    std::vector<int> numbers;
    numbers.push_back(4);
    numbers.push_back(3);
    numbers.push_back(2);

    auto beg = numbers.begin();
    auto mid = numbers.begin() + 1;
    std::cout << *beg << std::endl;
    std::cout << (beg < mid) << std::endl;      // True because beg (index 0) points to an element earlier than mid (index 1)
    std::cout << (*beg < *mid) << std::endl;    // False because the element pointed-to by beg (4) is bigger than the one pointed-to by mid (3)

    return 0;
}

出力 最初の行は、最初の要素の値である 4 を示しています! 2 行目は 1 (ゼロ以外のすべての値が true を意味する) を示し、最後の行は 0 (false を意味する唯一の値はゼロ) を示します。

于 2013-07-01T07:05:54.080 に答える