【发布时间】:2020-08-18 09:24:00
【问题描述】:
您好,我在 VS 2019 中使用前向列表 STL 库。这是我的代码块:
forward_list<int> fl1;
fl1.assign({ 1,2,3,4 });
fl1.push_front(0);
fl1.pop_front();
cout << "Front " << fl1.front() << endl;
forward_list<int>::iterator it4 = fl1.begin();
it4 = fl1.insert_after(it4, 5);
fl1.emplace_front(6);
fl1.remove(6);
forward_list<int> fl2;
fl2.assign({ 9,8,7,6,6 });
fl2.unique();
fl2.sort();
fl1.sort();
fl2.reverse();
fl1.merge(fl2);
// fl1.clear();
for (int i : fl1)
cout << i << endl;
一旦程序到达合并行,它会给我一个“Debug Assertion Failed Line: 1492 Expression: Sequence not ordered” 我的代码只有 500 行,而代码本身出现在第 342 行我有那个 for 循环,它应该处理遍历 fl1: for (int i : fl1) cout
当我点击中止并看到调试错误时,它显示“Derektut.exe 中 0x5049F2F6 (ucrtbased.dll) 处出现未处理异常:将无效参数传递给认为无效参数致命的函数”
这是为什么?
【问题讨论】:
-
要使用
merge(),列表需要排序,而您的fl1列表未排序。 See the documentation -
所以我添加了排序命令,它仍然给了我同样的错误@PaulMcKenzie
-
您应该发布minimal reproducible example。首先,
sort函数按升序排序,而您的其他列表按降序排序。这将如何运作? -
@PaulMcKenzie 实际上我最初有那个排序命令,但是从我的帖子中删除了它,因为当我检查它不是解决方案时,所以我把它删除了。这是我检查的第一件事
-
如果列表未排序,则行为未定义,这意味着任何事情都可能发生,包括“工作”。所以你导师的代码是错误的,但他们不知道,因为编译器的运行时没有检查,也不需要检查。 Visual Studio 调试运行时库将实际检查列表是否已排序,并断言列表是否未排序。现在在 Visual Studio 下以“发布”模式运行您的代码——您看到错误了吗?如果不是,那么这就是您的导师正在处理的问题 - 代码错误,但没有迹象表明代码是错误的。
标签: c++