【发布时间】:2017-09-08 12:26:09
【问题描述】:
#include<bits/stdc++.h>
#define mpq pair<int,Query>
using namespace std;
class Query{
public:
int a1,a2,b1,b2,c1,c2,d,l,r;
Query(){}
Query(int a1,int a2,int b1,int b2,int c1,int c2,int d,int l,int r){
this->a1=a1; this->a2=a2;
this->b1=b1; this->b2=b2;
this->c1=c1; this->c2=c2;
this->d=d; this->l=l; this->r=r;
print();
}
Query(int d,int l,int r){
Query(0,1,0,1,0,1,d,l,r);
}
void print(){
cout<<d<<" "<<l<<" "<<r<<endl;
}
};
map<int,Query> query;
int main(){
query.insert(mpq(1,Query(0,1,0,1,0,1,1,1,1)));
query[1].print();
cout<<endl;
query[4]=Query(4,4,4);//not working properly
query[4].print();//giving output of query[1].print
cout<<endl;
query[2]=Query(0,1,0,1,0,1,2,2,2);
query[2].print();
}
我无法解释这段代码的输出
query[4].print() 给出了意外的输出
我期待输出是
4 4 4
但它正在给予
1 1 1
作为输出
【问题讨论】:
-
如果 typedef 更适合用例,则不要在 c++ 中使用 #define:typedef std::pair
mpg; -
这段代码的前三行都是不好的做法。没有名为“bits/stdc++.h”的标准头文件;像这样的文本宏是等待发生的事故(使用
typedef);而using namespace std;迟早会咬你(使用std::cout)。当我在做的时候,你真的需要std::endl做的额外的东西吗?'\n'结束一行。
标签: c++ dictionary constructor std stdmap