TEL:400-8793-956
当前位置:开发工具

C ++ vs编译中存在错误。双击错误跳转到内部结构实现。你怎么知道哪句话是错的?

提问者: 近期获赞: 浏览人数: 发布时间:2020-12-14 13:12:43

 问:如果是异常,编译器如何使用调用堆栈定位错误?

 
#include <iostream>
#include <sstream>
#include <vector>
#include <algorithm>
#include<cmath>
#include <map>
using namespace std;
stringstream ss;
 
int main()
{
    int n,m;
    cin>>n>>m;
    vector<multimap<int,char*>> vm;
    map<char*,vector<int>> info;
    int i=0;
    int a,c,math,e;char id[8];
    while(i<n)
    {
        scanf("%s",id);
        cin>>c>>math>>e;
        a=(c+math+e)/3;
        vm[0].insert(pair<int,char*>(a,id));
        vm[1].insert(pair<int,char*>(c,id));
        vm[2].insert(pair<int,char*>(math,id));
        vm[3].insert(pair<int,char*>(e,id));
        vector<int> v(4);
        v[0]=a;v[1]=c;v[2]=math;v[3]=e;
        info.insert(pair<char*,vector<int>>(id,v));
        i++;
 
    }
    vector<map<int,char*,greater<int>>> vmm;
    
    for(int i=0;i<4;i++)
    {
        int count=0;
        auto it=vmm[i].begin();
        while(it!=vmm[i].end())
        {    
            count+=vmm[i].count(it->first);
            vmm[i].insert(it->first,count);
            int i=count;
            while(i--)
                it++;
        }
    }
    char arrstr[2001][8];   //[m][6]
    i=0;
    while(i<m)
        scanf("%s",arrstr[i++]);
 
    i=0;
    while(i<m)
    {
        char c;
        if(info.find(arrstr[i])==info.end())  //
        {cout<<"N/A";i++;continue;}
        auto vGrade=info[arrstr[i]];
        int rank=2000;
        for(int i=0;i<4;i++)
        {
            auto it=vmm[i].find(vGrade[i]);int gap=1;
            while(it!=vmm[i].begin())
            {
                gap++;
                it--;
            }
            rank=rank<gap?rank:gap;
            if(rank>gap)
            {
                rank=gap;
                if(i==0) c='A';
                else if(i==1) c='C';
                else if(i==2) c='M';
                else c='E';
                    
            }
            cout<<rank<<" "<<c;
        }
        i++;
    }
 
 
 
    system("pause");
    return 0;
}
 
答:为什么C ++代码放置Java标记?
这样设置问题时,您不认识编辑器吗?
精通业务
编译器错误是最好的调试错误之一,所有错误都由编译器明确告知
。在代码中的以下代码行:
 
vmm[i].insert(it->first,count);
这里vmm[i]这是一个map<int,char*>,更何况,它需要插入值时使用的pair<int, char*>包装键值对,it->first这是一个int,count这也是一个int,值类型和map的定义不匹配。
如果您不关心插入的返回值,我认为它map[key] = value以更简洁的方式很有用
上一篇: 如何自定义vscode文件夹的排序?
下一篇: Atom配置golang开发环境,每次启动atom都会报告错误