16

次のコードは、最初の for ループでベクトルに 10 個の値を入力します。2 番目の for ループでは、ベクトルの要素を出力します。出力は j ループの前の cout ステートメントまでです。範囲外のベクトル添え字のエラーが発生します。

#include "stdafx.h"
#include "iostream"
#include "vector"
using namespace std;

int _tmain(int argc, _TCHAR * argv[])
{
    vector<int> v;

    cout << "Hello India" << endl;
    cout << "Size of vector is: " << v.size() << endl;
    for (int i = 1; i <= 10; ++i)
    {
        v.push_back(i);

    }
    cout << "size of vector: " << v.size() << endl;

    for (int j = 10; j > 0; --j)
    {
        cout << v[j];
    }

    return 0;
}

4

3 に答える 3

14

プッシュバックをどのようにインデックス化するかに関係なく、ベクトルには0( 01、 ...、9) からインデックス化された 10 個の要素が含まれます。したがって、2番目のループv[j]では無効jです10

これにより、エラーが修正されます。

for(int j = 9;j >= 0;--j)
{
    cout << v[j];
}

一般に、インデックスはベースとして考えたほうがよいため0、最初のループも次のように変更することをお勧めします。

for(int i = 0;i < 10;++i)
{
    v.push_back(i);
}

また、コンテナーの要素にアクセスするための慣用的なアプローチは、反復子 (この場合は逆反復子) を使用することです。

for (vector<int>::reverse_iterator i = v.rbegin(); i != v.rend(); ++i)
{
    std::cout << *i << std::endl;
}
于 2013-10-19T11:34:03.927 に答える