我正在读一本关于C编程语言的书,我发现:
#define cat(x,y) x##y
#define xcat(x,y) cat(x,y)
Run Code Online (Sandbox Code Playgroud)
调用cat(cat(1,2),3)产生错误,而调用xcat(xcat(1,2),3)产生预期结果123.
两者的工作方式有何不同?
这是一个有效的代码即使是有冲突最大,全局变量和MAX(INT,INT) ,内部功能空间std.
为什么没有错误?
using namespace std;
int max;
int main()
{
int c;
c=max;
//c=max(5,3);
}
Run Code Online (Sandbox Code Playgroud) 我想生成一个vector< pair<int,int> > v...的所有排列使用c ++ next_permutation,这样只有在v[i].first不考虑v[i].second... 的值的基础上生成排列...
v.push_back(pair<int,int>(3,600));
v.push_back(pair<int,int>(2,900));
v.push_back(pair<int,int>(2,800));
Run Code Online (Sandbox Code Playgroud)
我需要遵循3个排列(处理(2,900)和(2,800)相同).
(2,900)(2,800)(3,600)
(2,900)(3,600)(2,800)
(3,600)(2,900)(2,800)
但相反,我得到6个排列((2,900)和(2,800)被处理不同)
我知道必须通过在next_permutation中使用比较器函数来完成....但我无法....请帮助如何使用比较器函数...
这是代码..
int main()
{
vector< pair<int,int> > v;
v.push_back(pair<int,int>(3,600));
v.push_back(pair<int,int>(2,900));
v.push_back(pair<int,int>(2,800));
sort(v.begin(),v.end());
do
{
for(int i=0; i<v.size(); i++)
{
printf("%d %d ",v[i].first,v[i].second);
}
printf("\n");
}while( next_permutation(v.begin(),v.end()) );
return 0;
}
Run Code Online (Sandbox Code Playgroud)