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
我有一个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" }
感谢您的阅读。
相关文章:
- 将指针作为缓冲区传递到第一个字符串元素
- C++字符串问题-如何访问字符串元素
- 反转由空格分隔的字符串元素将返回比原始字符串更大的字符串
- 将向量元素与字符串元素进行比较,而不初始化向量
- 如何获取数组中字符串元素的字符数?[C++]
- 如何删除在没有STL的队列中存储在数组中的第一个字符串元素
- 比较两个向量的<Structs>字符串元素
- 将字符串元素转换为整数 (C++11)
- 如何使操作员返回引用字符串元素
- 访问字符串元素地址
- 第一个字符串元素的地址产生意外结果
- 在C 中的字符串向量的字符串元素中循环遍历所有字符
- 将字符串元素分配给结构数组中的结构
- C++检查字符串元素的相等性
- 将字符串元素转换为整数C++
- 试图将字符串元素与循环和索引进行比较,但索引不会增加
- C++ - 链表插入排序(字符串元素)
- C++将二维C字符串元素传递到函数中
- 从字符串元素中获取字符串
- 比较列表<string>和向量<string>中的字符串元素