【问题标题】:What is the meaning of "<?=" in C++ [duplicate]C ++中“<?=”的含义是什么[重复]
【发布时间】:2013-12-31 08:59:48
【问题描述】:

我在 SnapDragon 的 topcoder 解决方案中多次观察到这条线 ret http://community.topcoder.com/stat?c=problem_solution&rm=166781&rd=5865&pm=3115&cr=272072。上面的行出现在从底部算起的第 6 行。 这是代码

   vector<string> tokenize(string s, string ch) { 
  vector<string> ret; 
  for( int p = 0, p2; p < s.size(); p = p2+1 ) { 
    p2 = s.find_first_of(ch, p); 
    if( p2 == -1 ) p2 = s.size(); 
    if( p2-p > 0 ) ret.push_back( s.substr(p, p2-p) ); 
  } 
  return ret; 
} 

vector<int> tokint(string s, string ch) { 
  vector<int> ret; 
  vector<string> p = tokenize(s, ch); 
  for( int i = 0; i < p.size(); i++ ) 
    ret.push_back( atoi(p[i].c_str()) ); 
  return ret; 
} 

vector<vector<int> > tokmat(vector<string> s, string ch) { 
  vector<vector<int> > ret; 
  for( int i = 0; i < s.size(); i++ ) 
    ret.push_back( tokint(s[i], ch) ); 
  return ret; 
} 

int pref[15][30]; 

class OrderFood { 
public: 
int selectEntrees(vector <int> a, vector <string> b) { 
  int i, j, k, x, y, z, n; 

  VVI t = tokmat(b, " "); 
  for( i = 0; i < t.size(); i++ ) 
  for( j = 0; j < t[i].size(); j++ ) 
    pref[i][t[i][j]] = 1; 
  n = a.size()/2; 
  map<VI, int> m; 
  for( i = 0; i < (1<<n); i++ ) { 
    VI v(t.size()); 
    for( j = 0; j < n; j++ ) if( i&(1<<j) ) 
    for( k = 0; k < t.size(); k++ ) 
      v[k] += pref[k][j]; 
    for( j = 0; j < t.size(); j++ ) if( v[j] > 2 ) break; 
    if( j < t.size() ) continue; 
    x = 0; 
    for( j = 0; j < n; j++ ) if( i&(1<<j) ) 
      x += a[j]; 
    if( m.count(v) ) 
      m[v] <?= x; 
    else 
      m[v] = x; 
  } 
  int n2 = a.size()-n; 
  int ret = 1000000000; 
  for( i = 0; i < (1<<n2); i++ ) { 
    VI v(t.size(), 2); 
    for( j = 0; j < n2; j++ ) if( i&(1<<j) ) 
    for( k = 0; k < t.size(); k++ ) 
      v[k] -= pref[k][j+n]; 
    for( j = 0; j < t.size(); j++ ) if( v[j] < 0 ) break; 
    if( j < t.size() ) continue; 
    x = 0; 
    for( j = 0; j < n2; j++ ) if( i&(1<<j) ) 
      x += a[j+n]; 
    if( !m.count(v) ) continue; 
    ret <?= x + m[v]; 
  } 
  if( ret == 1000000000 ) return -1; 
  return ret; 
} 
};

【问题讨论】:

  • 你能把代码复制粘贴到这里吗?我无法访问它。
  • 在需要登录的 URL 后面发布代码有点意思......
  • 我没有看到任何&lt;=?s
  • ret &lt;?= x + m[v];
  • 有一些 = 不是标准 c++ 的一部分,而是一些 gcc 扩展(最小最大运算符)。只发布那部分而不是整个 blob 会很有用

标签: c++


【解决方案1】:

&lt;?= 运算符是最小值运算符,&gt;?= 是最大值运算符。这些都是非标准的 GCC 扩展。 a&lt;?=ba=min(a,b)。使用a=min(a,b) 而不是这个。它更具可读性,并且跨平台效果更好

【讨论】:

  • 它们没有被弃用,它们从未成为标准 c++ 的一部分,并且一直是 gcc 扩展(并且在那里被弃用)
  • 谢谢你,我以前从未见过。
【解决方案2】:

operator&lt;?=GCC extension。在您的示例中,它将ret 设置为retx + m[v] 的最小值。

这不是标准运算符,因此不能移植到不同的编译器。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-07-14
    • 2012-04-19
    • 2022-01-14
    • 2013-04-26
    • 2014-03-22
    • 2020-05-26
    • 2013-03-11
    • 2021-07-19
    相关资源
    最近更新 更多