std::out_of_range basic_string 当从 vector 中的空字符串转到下一个元素时

std::out_of_range basic_string when going to the next element from an empty string in vector

本文关键字:字符串 元素 下一个 vector range of out basic string std 当从      更新时间:2023-10-16

我有一个std::vector<std::string>,在每个索引处保存单独的字符串。每个row表示一个新字符串,每个column表示字符串中字符的(index + 1)

如果我在特定行中插入一个空字符串(从 1 开始(,请通过以下方式执行以下操作:

lines.insert(lines.begin() + row, "");
row++;
column = 1;

这意味着如果我在第 2 行插入空字符串,我的向量如下所示:

{ "Hello", "", "World" }

但是,如果我从第 1 行("你好"(移动到第 2 行("(,通过

row++;
column = 1;

我收到错误:

terminating with uncaught exception of type std::out_of_range: basic_string

如果我从第 2 行移动到第 3 行,也会发生同样的错误,因此移动到具有有效列的行不起作用。如果我没有空字符串,则不会发生此错误。如果我在新字符串中放入任何内容,然后将其插入到向量中,我可以毫无错误地使用row++;

我相信

我有你的问题的答案。仔细阅读您的帖子后,您似乎正在插入矢量的位置 1、2 和 3。

向量的工作方式类似于数组。我不会详细介绍向量的实现,但您需要注意的是数组从索引 0 开始

现在,您还需要了解vector.begin()vector.end()的工作原理。 vector.begin()的工作方式类似于指向矢量的第一个元素指针vector.end()的工作方式类似于指向矢量最后一个元素之后的指针

由于row从 1 开始,因此当您执行 lines.insert(lines.begin() + row, "") 时,您正在做的是在向的第一个元素之后插入 *one。因此,您的向量变为如下所示:

{ <uninitialized string>, "Hello", "", "World" }

感谢您的阅读。