Visual Studio 2012和c++11的不同输出
Different Output in Visual Studio 2012 and c++11
以下代码在Visual Studio 2012和c++11中产生不同的输出:
问题:http://www.codechef.com/FEB14/problems/SUBMIN
小象在玩数组游戏。给定一个数组A0, A1,…, N个整数的AN−1。然后给出Q个查询,每个查询包含一个整数K。他必须告诉有多少个子数组满足条件:函数foo在应用于子数组时返回K。
在这个问题中,子数组定义为连续元素Ai, Ai+1,…, Aj其中0≤i≤j≤N−1。函数foo应用于数组时,返回数组中所有元素的最小值。
例如,foo应用于数组[7,5,10,7,5,8]时返回5。请注意,子数组Ai, Ai+1,…, Aj和Ak, Ak+1,…,当且仅当问题中i≠k或j≠l时,Al是不同的。
输入输入的第一行包含N,表示数组的大小。下一行包含N个以空格分隔的整数A0, A1,…, AN−1,表示阵列。然后下一行包含Q,表示查询的数量。每个查询由每行一个整数组成,表示k。
输出对于每个查询,打印所需的子数组数量。
输入:514 1 2 3 4
43
4 6
VS2012和gcc 4.3.2的输出是
2
2
0
8
而gcc 4.8.1和c++11的输出是:
2
2
0
24
http://ideone.com/DUp72c http://ideone.com/kFTlNe 代码:int main() {
map <int, vector<int> >b;
int arr[51], n;
int ans = 0;
cin >> n;
for (int i = 0; i < n; i++)
{
cin >> arr[i];
b[arr[i]].push_back(i);
}
int q, query, pos, l1, l2, vlength;
cin >> q;
while (q--)
{
ans = 0, l1 = 0, l2 = 0;
cin >> query;
vlength = b[query].size();
int t = 0, c = 0;
while (t < vlength){
c = 1;
for (size_t i = b[query].at(t) + 1; (i<n) && (arr[i] >= query); i++)
if (arr[i] == query)
{
c++;
}
for (size_t i = 0; i < c; i++)
{
l2 = 0;
for (size_t k = b[query].at(t + i) - 1; (k >= 0) && (arr[k] > query); k--)
l2++;
for (size_t j = i; j < c; j++)
{
l1 = 0;
for (size_t m = b[query].at(t + j) + 1; (m<n) && (arr[m] > query); m++)
l1++;
ans += (l1 + 1)*(l2 + 1);
}
}
t += c;
}
cout << ans << endl;
}
return 0;
}
这是由于下标超出范围。通过更改
再次检查int arr[51];
array<int, 51> arr;
您应该得到断言错误。我怀疑不同的输出是不同的编译器处理数组索引超出边界的行为的结果,在其中一种情况下,分配arr[I],其中I>50正在改变其他变量的值。
相关文章:
- 递归函数计算序列中的平方和(并输出过程)
- 如何使用 < 和 > 命令获取 c++ 中的输入和输出?
- Qt creator 4.11,在应用程序输出面板中创建一个链接
- 为什么在 Direct X 11 中没有我的程序输出?
- C++11 中 std::to_string 的奇怪输出
- 输出时间和日期与小数时间,不使用 C++11
- C++11 fgetc 在"r+b"模式下使用时向我的文件输出 0
- 我写了一个函数来删除循环链接列表中的第 1 个节点,但输出显示无限次"55 44 33 22 11 99",那么我该如何解决呢?
- C++ 11 异步和未来输出无序
- 如何在C++11中输出枚举类的值
- 在 C++11 中将结构作为输出参数传递
- 分段错误:11(C++文件输入和输出、类和动态数组)
- 在 c++11 中,是否仍然需要传入对接受函数输出的对象的引用
- Visual Studio 11终极静态分析显示没有输出
- c++ 11 std::thread使用ofstream输出的东西,但是什么也得不到,为什么?
- C++11为std::chrono::time_point添加流输出运算符
- 如何在c++11中将值输出到流的元组
- Visual Studio 2012和c++11的不同输出
- 在一个简单的c++ 11四线程程序中,如果我注释标准输出打印行,我的两个消费者线程就不会返回
- DirectX 11 -计算着色器:写入输出资源