c++ - C++ 中的二维 vector 数组

标签 c++

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

#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();
}

感谢您的帮助;)

最佳答案

有两个问题。首先, vector 没有被初始化。默认情况下, vector 有 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();
}

关于c++ - C++ 中的二维 vector 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55814846/

相关文章:

android - Qt 造物主 : No valid kits for Android found

c++ - 用 Eigen3 对两个矩阵进行插值

c++ - 如何通过socket编程在两台机器之间发送文件?

C++ ifstream 跳过第一行

c++ - 为什么 `std::is_const_v` 没有按预期运行?

c++ - 零位移位会正常工作吗?

c++ - 迭代包含在两个范围的交集中的对象

c++,在子类中,没有对象如何访问父类的方法?

C++ 类 : Object that creates Thread + pointer to the function = Access violation

c++ - 使用 cin.get 获取整数