更改.cpp程序的输入文件中数据的位置会意外更改输出
Changing position of data in Input file to a .cpp program Changes output unexpectedly
这就是代码的用途:https://www.codechef.com/LRNDSA04/problems/STACKS
以下是代码片段:
#include<bits/stdc++.h>
using namespace std;
int main() {
ios_base::sync_with_stdio(false);
cin.tie(nullptr);
int t; cin >> t;
while (t--)
{
int n; cin >> n;
vector<int> a;
while(n--) {
int x; cin >> x;
if(a.empty()) {
a.push_back(x);
} else {
vector<int>::iterator it = upper_bound(a.begin(), a.end(), x);
int pos = it - a.begin();
if(pos == a.size()) {
if(a[pos] > x) {
a[pos] = x;
} else {
a.push_back(x);
}
} else {
a[pos] = x;
}
}
}
cout << a.size();
for(auto e: a) {
cout << " " << e;
}
cout << "n";
}
return 0;
}
该程序的输入为:
2
6
3 4 5 1 1 2
8
14 5 13 19 17 10 18 12
它生成的意外输出:
3 1 1 2
3 5 10 12
如果输入更改为:
2
8
14 5 13 19 17 10 18 12
6
3 4 5 1 1 2
它显示正确的输出:
4 5 10 12 18
3 1 1 2
如果8个数字在输入文件中的位置发生更改,则将其作为输入的测试用例。然后观察到这种行为。
当通过gdb
查看代码的运行时,它会为两个输入文件提供预期的输出,这是没有问题的。
输出不合理,我缺少什么?
在此检查中:
if(pos == a.size()) {
if(a[pos] > x) { // this is UB
如果条件为true,则索引到a
的无效位置,这将调用未定义的行为。
看来你想做
if(pos != a.size()) {
相反。检查这种情况的常规方法是
if(it != a.end()) {
相关文章:
- 将值指定给向量(2D)的向量中的某个位置
- 使用Unreal C++获取VR耳机的世界位置/方向
- 写入位置0x0000000C时发生访问冲突
- 如何将两个不同矢量的同一位置的两个元素组合在一起
- 在C++中对T*类型执行std::move的意外行为
- GL_SHADERSTORAGE_BUFFER位置是否与其他着色器位置冲突
- 使用取消引用的指针的多态性会产生意外的结果.为什么?
- 如何使用cudaMallocManaged在指针位置初始化对象?(C++)
- 处理除以零会导致<csignal>意外行为
- 无法获取webot::PositionSensor对象中位置传感器的值
- 非常量变量只读位置的赋值
- vscode下的Arduino代码出现意外编译错误
- 使用++运算符会导致意外的结果
- 套接字读取后,我在缓冲区中看到意外输入
- 如何定义更改car类中car位置的方法
- 使用迭代器时如何访问对象在向量中的位置?
- 更改.cpp程序的输入文件中数据的位置会意外更改输出
- boost::p rogram_options 在指定意外的位置参数时不报告任何错误
- 试图读取AIFF文件意外错误与指针位置等有关
- Googletest-找出意外通话的位置