数据结构作业遇到的问题

  • C++ : 出错解释 base operand of ‘->’ has non-pointer type ‘std::pair
    由于是在项目作业里面的,代码量比较长,故此处引用csdn上的类似报错代码
list<pair<int,int>> cachelist;
unordered_map<int,list<pair<int,int>>::iterator> map;

void put(int key, int value) {
auto it = map.find(key);
if(it != map.end()){
touch(it->second);
it->second->second = value; //
}
else if(map.size() < cap){
cachelist.push_front(make_pair(key,value));
map[key]=cachelist.begin();
}
else{
auto it = cachelist.back();//
map.erase(it->first); // 出错位置~~!!
cachelist.pop_back();
cachelist.push_front(make_pair(key,value));
map[key]=cachelist.begin();
}
}

上述代码中的错误关键代码处

it->first

这里需要知道的是“->”是适用于指针的形式,其本质是从指针上面调用地址方面,即&。只有这样才可以用箭头指向符。而上述代码中it这个变量不是指针,而是一个int类型数据,其并无“->”的用法,所以此处要用“.”作为具体内容的引入。

  • jump to case label [-fpermissive]报错
    该报错的原因是switch case语句中定义新变量的时候并未限定该新变量的范围,故保持错误。具体的错误代码如下:
    switch(choice){
    case 1:int a=2;break;
    case 2:break;
    default:break;
    }
    正确的代码应为:
    switch(choice){
    case 1:{
    int a=2;
    break;
    }
    case 2:break;
    default:break;
    }