c++ - 向量输入后命令立即终止
问题描述
我创建了这个程序:
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main(){
int n;
cin>>n;
vector<int> m(n);
for(int i=0;i<n;i++){
cin>>m[i];
}
sort(m.begin(),m.end());
vector<bool> used(n,false);
for(int i=n;i>0;i--){
for(int j=i;j>0;j--){
if((m[i]/m[j]>=2)&&(used[i]==false))
used[j]=true;
}
}
int numOfElem=0;
for(int i=0;i<n;i++){
if(used[i]!=true){
numOfElem++;
}
}
cout<<"\n"<<numOfElem<<"\n";
return 0;
}
现在由于某种原因,在我输入向量 m 的元素后,我的命令被终止,有人知道这个问题的原因吗?
解决方案
自从您开始迭代(向量的大小)以来,您就可以访问向量m
并越界。这会导致您的程序具有未定义的行为,并且崩溃是其中一种可能的结果。used
i == n
建议修复:
for(int i = n - 1; i >= 0; i--) { // start with n-1 and ...
for(int j = i; j >= 0; j--) { // ... include 0 in the loop
另请注意,这m[i] / m[j]
可能是除以零并引发异常,因此您可能也需要m[j] == 0
在进行除法之前检查是否。
推荐阅读
- nginx - nginx (openresty) 获取当前节点
- php - php格式化谷歌放置输出数组
- java - 在Java中通过分隔线分割文件
- reactjs - 如何在 JSX / React 中键入检查不可渲染的对象
- python - Python:为循环的每次迭代增加符号函数的数量
- xml - XMLSyntaxError:需要开始标记,未找到“<”,第 1 行,第 1 列
- snmp - SNMPd 向外部打开除 161 和 162 之外的“随机”UDP 端口
- android - 从外部活动中隐藏 RecyclerView 中的按钮
- testing - 在 fixture.before 钩子中添加 Login 方法会在 Testcafe 中出现错误
- xslt - xslt 的 XPath 表达式