【问题标题】:2d char vector printing spaces when printing second column打印第二列时的 2d char 矢量打印空间
【发布时间】:2020-07-10 09:39:32
【问题描述】:

这里我有一个 char 的二维向量 -

std::vector<std::vector<char>> solution = {
 {"O","1"}, 
 {"T","0"}, 
 {"W","9"}, 
 {"E","5"}, 
 {"N","4"}
};

从第一列打印任何内容 - 打印正常。

cout << "In main - " << solution [ 1 ] [ 0 ]; // Prints T

但是当我尝试访问第二列的元素时。

cout << "In main - " << solution [ 1 ] [ 1 ]; // Prints blank space - I can't seem to understand why's the case.

经过安静的搜索后,我尝试在每个元素周围加上单引号。

std::vector<std::vector<char>> solution = {
  {'O','1'}, 
  {'T','0'}, 
  {'W','9'}, 
  {'E','5'}, 
  {'N','4'}
};

在这种情况下可以正常工作。

cout << "In main - " << solution [ 1 ] [ 1 ]; // Gives me 0 in this case.

现在为什么我在访问"" double quotes 场景中的第二列时会出现空格。

【问题讨论】:

  • 这能回答你的问题吗? Constructing a vector<int> with 2 string literals TL;DR 第一个程序有 UB,所以它可能会给出任何结果。
  • 我看到它与我的问题有关,但没有解释或我不明白。什么是“TL:DR,UB”?我没有基于范围的循环,第二件事是它只发生在这个字符串和另一个字符串上,所有其他字符串都可以正常工作。在 10 个测试用例中只有 2 个失败,它们在打印无效字符或空格时都有相同的问题。
  • 对不起,TL;DR 的意思是“太长,没读过”。我在下面添加了一个答案,也解释了 UB。

标签: c++ c++11 stdvector stdstring


【解决方案1】:

在您的第一个示例中,对于 solution 的每个元素,您尝试从 2 个字符串文字构造一个 vector&lt;char&gt;。这将使用带有 2 个迭代器的 vector 的构造函数(因为字符串文字可以转换为指针)。由于指针未表示有效范围,因此会调用未定义行为 (UB)。

在第二个示例中,对于 solution 的每个元素,您尝试从 2 个 chars 构造一个 vector&lt;char&gt;,这非常好,并且可以为您提供预期的结果。

【讨论】:

  • 无论如何要解决这个问题?因为输入并不真正在我手中,它总是在字符串文字中。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-09-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-01
  • 2016-01-26
  • 1970-01-01
相关资源
最近更新 更多