分段故障.矢量cpp的使用
Segmentation fault. Use of vectors cpp
当我在SPOJ中提交以下代码时,它给出了一个运行时错误。尽管它在我的编译器上运行良好。可能是由于测试用例或其他原因。我是计算机编程的新手。请帮我找出错误。问题是:http://www.spoj.com/problems/ANARC05B/en/输入始终按排序顺序排列。这是我的代码:
#include<iostream>
#include<vector>
#include<algorithm>
#include<cstdio>
using namespace std;
int main()
{
while(1)
{
int n;
scanf("%d",&n);
if(n==0)
return 0;
int element;
vector<int> v1(n);
for(int i=0;i<n;i++)
{
scanf("%d",&element);
v1[i]=element;
}
int m;
scanf("%d",&m);
vector<int> v2(m);
for(int i=0;i<m;i++)
{
scanf("%d",&element);
v2[i]=element;
}
vector<int> v3; //vector of common elements
int j=0;
if(m>n)
{
for(int i=0;i<n;i++)
{
if(binary_search(v2.begin(),v2.end(),v1[i]))
{
v3.push_back(v1[i]);
}
}
}
else if(n>=m)
{
for(int i=0;i<m;i++)
{
if(binary_search(v1.begin(),v1.end(),v2[i]))
{
v3.push_back(v2[i]);
}
}
}
vector<int> v4; //vector of sum of parts upto common elements in v1
j=0;
int k;
int sum;
for(int i=0;i<v3.size()+1;i++)
{
sum=0;
for(k=j;k<v1.size();k++)
{
sum=sum+v1[k];
if(v1[k]==v3[i])
break;
}
j=k+1;
v4.push_back(sum);
}
vector<int> v5; //vector of sum of parts upto common elements in v2
j=0;
for(int i=0;i<v3.size()+1;i++)
{
sum=0;
for(k=j;k<v2.size();k++)
{
sum=sum+v2[k];
if(v2[k]==v3[i])
break;
}
j=k+1;
v5.push_back(sum);
}
sum=0;
for(int i=0;i<v4.size();i++)
{
if(v4[i]>v5[i])
sum=sum+v4[i];
else
sum=sum+v5[i];
}
cout<<sum<<endl;
}
return 0;
}
您的代码中有一些问题,但最突出的是:
for(int i=0;i<v3.size()+1;i++)
^^^^
// ...
if(v2[k]==v3[i])
^^^^
您用一个大小声明向量,然后继续到push_back
添加元素
vector<int> v1(n);
for(int i=0;i<n;i++)
{
scanf("%d",&element);
v1.push_back(element);
}
因此,如果n
是5
,则会有10个元素。5被初始化,然后5被推回。
{0, 0, 0, 0, 0, 1, 2, 3, 4, 5}
^initialized ^push_back
你应该reserve
vector<int> v1;
v1.reserve(n);
for(int i=0;i<n;i++)
{
scanf("%d",&element);
v1.push_back(element);
}
或者用正确的大小声明,然后使用operator[]
vector<int> v1(n);
for(int i=0;i<n;i++)
{
scanf("%d",&element);
v1[i] = element;
}
您试图对函数不支持的未排序数组进行二进制搜索。我不确定它是否会导致分割错误,但它显然是不正确的。
相关文章:
- 分段故障(堆芯转储)矢量
- .cpp和.h文件中的模板专用化声明
- 为什么两个不同的未命名名称空间可以共存于一个cpp文件中
- Linux的Cpp上的计时器
- 如何运行位于boost/libs/python/example/tutorial目录中的hello.cpp和Jamfil
- 命名空间中具有.h和.cpp文件的类
- 内置函数可查看CPP中的成员变量
- C++中的动态铸造故障
- 数组的指针从不分段故障
- 无法编译 rtmidi 测试 cmidiin.cpp 文件, 非法指令
- Cpp-Tuple使用带有变量的get
- C++-试图将函数指针推回到另一个CPP文件中的矢量时出错
- 有充分的理由在h文件中使用include保护而不是cpp文件吗
- 如何通过cpp程序运行shell脚本
- vscode g++链路故障:体系结构x86_64的未定义符号
- 访问被拒绝后,c++中的故障保护代码
- 使用2个键的cpp-stl::优先级队列排序不正确
- Cpp代码故障(显示意外数字)
- CPP-我得到分割故障(核心转储)
- 分段故障.矢量cpp的使用