C++中"<?="的含义是什么?

Adi*_*iar -1 c++

我在topcoder中的SnapDragon解决方案中多次观察到这一行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; 
} 
};
Run Code Online (Sandbox Code Playgroud)

scr*_*rd3 11

<?=操作是最小的运营商,并且>?=是最大的运营商.这两者都是非标准的GCC扩展.a<?=ba=min(a,b).使用a=min(a,b)而不是这个.它更具可读性,并且跨平台工作得更好

  • 它们不被弃用,它们从未成为标准c ++的一部分,并且一直是gcc扩展(并且在那里被弃用) (6认同)