SORU
20 Ocak 2010, ÇARŞAMBA


Bunu artırmak kullanmak mümkün::dosyalarda grup std::map?

boost::foreach bana tasarrufu gibi çok yararlı bir yazı çok şey buluyorum. Örneğin, bir listedeki tüm elemanları yazdırmak istiyorum ki:

std::list<int> numbers = { 1, 2, 3, 4 };
for (std::list<int>::iterator i = numbers.begin(); i != numbers.end();   i)
   cout << *i << " ";

::boost dosyalarda grup kodu yukarıda çok simplier yapar:

std::list<int> numbers = { 1, 2, 3, 4 };
BOOST_FOREACH (int i, numbers)
   cout << i << " ";

Çok daha iyi! Ancak hiç std::mapler için bunu kullanmak için bir yol eğer mümkünse () anladım. Belgelere sadece vector string gibi türleri ile ilgili örnekler vardır.

CEVAP
20 Ocak 2010, ÇARŞAMBA


Kullanmanız gerekir:

typedef std::map<int, int> map_type;
map_type map = /* ... */;

BOOST_FOREACH(const map_type::value_type& myPair, map)
{
    // ...
}

Nedeni makro iki parametre beklemektedir. Çift tanımını içi için çalıştığınızda, size ikinci bir virgül, üç parametre yerine makro yapma tanıtmak. Bu kadar basit, herhangi bir C yapıları saygı değil, sadece metin biliyor.

BOOST_FOREACH(pair<int, int>, map), bu kadar basit makro için bu üç bağımsız görür derken:

1.pair<int
2. int>
3. map

Yanlış olan. Bunun için her belgelerinde mentioned.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • colacas

    colacas

    29 EKİM 2006
  • Matt Stokes

    Matt Stokes

    22 Ocak 2008
  • monkophile

    monkophile

    25 Temmuz 2007