首页 > 解决方案 > C++中的二维向量数组

问题描述

该程序启动,但是在输入数据时,它会抛出一个错误(在 Visual Studio 中:表达式:向量下标超出范围)
我一定是做错了什么,但我对向量数组很陌生,所以我正在努力学习他们;)
另外,我想知道,当向量数组的大小未知时(可能会有所不同),使用什么循环条件

#include <iostream>
#include <conio.h>
#include <vector>
#include <string>

using namespace std;

int main()
{
    vector<vector<string>> v; // 2D vector array
    string stri; // Input Data

    for (auto i = 0;; i++)
    {
        for (auto j = 0;; j++)
        {
            cout << "Enter array's " << i << " and " << j << " element:";
            cin >> stri;
            v[i][j] = stri;
        }
    }
    for (auto i = 0;; i++)
    {
        for (auto j = 0;; j++)
        {
            cout << v[i][j] << "\t";
        }
        cout << endl;
    }
    _getch();
}

感谢帮助 ;)

标签: c++

解决方案


有两个问题。首先,向量没有被初始化。默认情况下,向量有 0 个元素,所以当你尝试访问时v[i][j],它会抱怨它超出范围。其次,没有退出循环的条件,使循环无限。假设您事先知道数组的大小,请尝试以下操作:

#include <iostream>
#include <conio.h>
#include <vector>
#include <string>

using namespace std;

int main()
{
    size_t n = 4;
    size_t m = 3;
    vector<vector<string>> v(n, vector<string>(m)); // 2D vector array
    string stri; // Input Data

    for (auto i = 0; i<v.size(); i++)
    {
        for (auto j = 0; j<v[i].size(); j++)
        {
            cout << "Enter array's " << i << " and " << j << " element:";
            cin >> stri;
            v[i][j] = stri;
        }
    }
    for (auto i = 0; i<v.size(); i++)
    {
        for (auto j = 0; j<v[i].size(); j++)
        {
            cout << v[i][j] << "\t";
        }
        cout << endl;
    }
    _getch();
}

如果您事先不知道大小并且希望用户决定,请尝试以下操作:

int main()
{
    vector<vector<string>> v; // 2D vector array
    string stri; // Input Data

    for (auto i = 0; ; i++)
    {
        v.emplace_back();
        for (auto j = 0; ; j++)
        {
            cout << "Enter array's " << i << " and " << j << " element (Enter 'End' to end the row): ";
            cin >> stri;
            if(stri == "End")
                break;
            v[i].push_back(stri);
        }
        cout << "Do you want to add another row? [y/n] ";
        char c;
        cin >> c;
        if (c == 'n')
            break;
    }
    for (auto i = 0;i<v.size(); i++)
    {
        for (auto j = 0;j<v[i].size(); j++)
        {
            cout << v[i][j] << "\t";
        }
        cout << endl;
    }
    getch();
}

推荐阅读