小编sha*_*kim的帖子

嵌套调用中##运算符的行为

我正在读一本关于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.

两者的工作方式有何不同?

c c-preprocessor

4
推荐指数
1
解决办法
122
查看次数

int max,变量和int max(int,int)之间没有冲突,是c ++中的一个函数

这是一个有效的代码即使是有冲突最大,全局变量和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)

c++ namespaces

0
推荐指数
1
解决办法
80
查看次数

next_permutation比较函数

我想生成一个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)

c++ algorithm stl

-3
推荐指数
1
解决办法
1507
查看次数

标签 统计

c++ ×2

algorithm ×1

c ×1

c-preprocessor ×1

namespaces ×1

stl ×1