【问题标题】:C++ 2D vector of characters from cin来自 cin 的 C++ 2D 字符向量
【发布时间】:2021-02-08 22:46:53
【问题描述】:

我想要一个可以通过索引访问的 Square 2D 数组。这是我的代码:

vector<vector<char>> B;
int SIZE;
cin >> SIZE;

for(int i = 0; i < SIZE; i++){
        for(int j = 0; j < SIZE; j++){
            cin >> B[i][j];
    }

输入格式为:

3
oox
oxo
xoo

所以它需要一个 SIZE x Size 任意字符的网格。字符不以空格分隔。

但是,即使我尝试用空格分隔,我的代码在输入第一个字符后也会失败。

我也尝试过使用 push_back()。但我希望能够访问这些元素。

例如 B[0][2] 应该给我'x'。我该怎么做?

【问题讨论】:

  • 旁注:许多(甚至可能是大多数)C++ 程序员会将 ALL_UPPERCASE_IDENTIFIERS 与 #define 宏和常量相关联。相应地命名你的变量,因为你越是让人们感到惊讶,你就会得到越多的错误报告。

标签: c++ arrays vector


【解决方案1】:

代码中的错误是你没有给2D Vector分配内存,直接开始使用了。

vector<vector<char>> B;   //HERE YOU DECLARE 2D Vector 
int SIZE;
cin >> SIZE;

for(int i = 0; i < SIZE; i++){
        for(int j = 0; j < SIZE; j++){
            cin >> B[i][j];   // BUT NO MEMORY ALLOCATED
    }

改为使用以下方法:

int SIZE;
cin >> SIZE;
vector<vector<char>> B(SIZE,vector<char>(SIZE)); // Here we allocate the memory
for(int i = 0; i < SIZE; i++){
  for(int j = 0; j < SIZE; j++){
    cin >> B[i][j];
  }
}

内存分配步骤是

vector<vector<char>> B(SIZE,vector<char>(SIZE));

这里我们创建一个大小为“SIZE”的向量,其每个元素都包含另一个大小为“SIZE”的向量。

此外,您应该使用空格分隔的字符提供输入:

3
o o x
o x o
x o o

【讨论】:

  • 在不指定大小的情况下是否可以这样做?我想让 B 成为一个全局变量,并且在我输入之前不知道大小。
  • @musicalears 全局变量是邪恶的,应该避免。如果您将变量作为参数传递,您将拥有一个易于审核的链,其中可能会修改内容。使用全局变量,所有函数都是可疑的,因为它们都可能产生副作用。小程序问题不大,但程序变得更复杂时会出现非强制错误。
  • 也就是说,像现在一样定义vector&lt;vector&lt;char&gt;&gt; B;。然后稍后 B= vector&lt;vector&lt;char&gt;&gt;(SIZE,vector&lt;char&gt;(SIZE)); 分配一个新的 vectorvectors 在当前 B 的顶部。
猜你喜欢
  • 1970-01-01
  • 2021-12-01
  • 1970-01-01
  • 2019-04-12
  • 1970-01-01
  • 2020-09-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多