因为没有完整的细节而提前道歉,但我在家里遇到了这个,现在正在工作。我也是STL新手,所以我确信我的语法在某处错了。
我正在尝试将omxplayer字幕渲染器代码修改为自动换行。输入是InternalChar类型的向量,其中InternalChar是我正在修改的类中的私有struct typedef。代码遍历向量查找自动换行位置。代码如下:
“input”的类型为std :: vector。 “输出”是这种向量的向量。
auto start=input.begin()
...我们不会(在这种特殊情况下)进入一个循环,找到自动换行点,从“输入”中的范围创建一个向量,并相应地更新“开始”......
output[count] = std::vector<InternalChar>(start, input.end())
修改
我想我可能一直在使用以下代替上述内容:
output.push_back(std::vector<InternalChar>(start, input.end()));
结束编辑
GDB告诉我,崩溃发生在最后一行,在某些“交换”函数或其他东西的STL深处。我的第一个想法是我需要使用“input.end() - 1”作为范围的结尾,但是它也会以相同的方式崩溃。
我还想知道问题是否是InternalChar没有赋值运算符,但它是一个带有bool成员和char32_t成员的简单结构,所以C ++可以确定如何从一个向量复制到新创建的之一。
非常感谢任何和所有帮助。
答案 0 :(得分:0)
如果您添加或删除元素,向量中的迭代器可能会变为无效,因为向量可能决定重新分配。因此,如果您将input.begin()
存储在某个变量中,然后决定使用它,则可能它不再有效。
答案 1 :(得分:0)
归功于Adam Burry和(因为他说尺寸(而不是容量())对约翰不太重要:
代码WAS使用[]访问权限,之前没有分配任何存储空间。切换到使用push_back(),这是我最初的意图但实际上没有实现。