SORU
19 AĞUSTOS 2015, ÇARŞAMBA


Neden hep STL Aralık belirlemek için tüm kabın üzerine çalışmak istesem bile'in algoritma işlevleri açıkça, değil mi?

STL kullanarak sort() min_element() gibi işlevleri olduğunda ben her zaman başlar ve açıkça sonunda aralığını belirleyin:

void range_example()
{
    std::vector<int> list = {7, 3, 9, 1, 5, 2};
    auto found_element = std::min_element(list.begin(), list.end());
    std::cout << *found_element << std::endl;
}

Bu benim kap parçası üzerinde çalışmayı düşünüyorum. eğer mantıklı, ama daha sık işlevleri bütün konteyner üzerinde çalışmam gerekiyor. Bunun için izin veren bir işlevde yok neden olmasının bir nedeni var:

std::vector<int> list = {7, 3, 9, 1, 5, 2};
auto found_element = std::min_element(list);

Bir şekilde göz ardı var olan bir kapsayıcı toplam aralığı için bir işlev çağrısı yapmak için var mı?

DÜZENLEME:Bir işlev kendimi o özetleyebilir miyim farkında değilim, ama bu tüm fonksiyonlar için yapılması gerekir, çünkü daha iyi bir yolu varsa, bunu bertaraf etmek istiyorum.

CEVAP
19 AĞUSTOS 2015, ÇARŞAMBA


Çoğu zaman, standart kütüphane minimal arayüzü tüm görevleri, yani&hafta gerekli gerçekleştirmek için gerekli sağlamak için tasarlanmıştır;arayüzü kabartmak önlemek için çalışır. Algoritma kullanımına bir çift kabul ettiğinde bütün bir konteyner üzerinde çalışabilir, ama eğer algoritma bir kap kabul ederse bir alt aralığı üzerinde çalıştırmak olamazdı. Yineleyici çifti daha temel ve standart kütüphane sağlar. Kolaylık fonksiyonları genellikle dahil değildir.

Ancak, sen kesinlikle ilk kişiye bu şekilde düşünüyorum ve işte tüm Boost.Range kütüphane adamış tedavi aralığı (her ikisi de bir kap ve bir dizi keyfi olarak tek bir varlık yerine bir çift kullanımına.

Ayrıca standart C kitaplığı gelecek sürüm Eric Niebler's range library birleştirmek için resmi bir teklif yok.

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Capcom Unity

    Capcom Unity

    5 NİSAN 2010
  • Commander Chalkboard

    Commander Ch

    20 Ocak 2014
  • Warner Bros. UK

    Warner Bros.

    6 HAZİRAN 2008