SORU
13 Ocak 2012, Cuma


En hızlı std her değerini sıfırlamak için bir yol::vector<int> 0

En hızlı şekilde 0 std::vector<int> her değeri sıfırlamak ve vektörleri başlangıç boyutu ne tutuyor ?

Bir döngü için [] operatör ?

CEVAP
13 Ocak 2012, Cuma


Hakkında en hızlı sorduğunuzda her zaman olduğu gibi: Ölçü! Yukarıdaki Yöntemleri (Mac Çınlama kullanarak):

Method      |  executable size  |  Time Taken (in sec) |
            |  -O0    |  -O3    |  -O0      |  -O3     |  
------------|---------|---------|-----------|----------|
1. memset   | 17 kB   | 8.6 kB  | 0.125     | 0.124    |
2. fill     | 19 kB   | 8.6 kB  | 13.4      | 0.124    |
3. manual   | 19 kB   | 8.6 kB  | 14.5      | 0.124    |
4. assign   | 24 kB   | 9.0 kB  | 1.9       | 0.591    |

10000 in bir vektör üzerinde 100000 tekrarlamalar kullanarak.

Düzenleme:Changeing eğer bu sayılar mantıklı olabilir sonuç zamanlarını değiştirirbazıyapay kriter tamamen optimize edilmiş olan güveni (final assembly code teftiş kadar iyi değil). Tabii en iyi gerçek koşullar altında Performans messure. Düzenleme sonunda

başvuru için kullanılan kod:

#include <vector>

#define TEST_METHOD 1
const size_t TEST_ITERATIONS = 100000;
const size_t TEST_ARRAY_SIZE = 10000;

int main(int argc, char** argv) {

   std::vector<int> v(TEST_ARRAY_SIZE, 0);

   for(size_t i = 0; i < TEST_ITERATIONS;   i) {
   #if TEST_METHOD == 1 
      memset(&v[0], 0, v.size() * sizeof v[0]);
   #elif TEST_METHOD == 2
      std::fill(v.begin(), v.end(), 0);
   #elif TEST_METHOD == 3
      for (std::vector<int>::iterator it=v.begin(), end=v.end(); it!=end;   it) {
         *it = 0;
      }
   #elif TEST_METHOD == 4
      v.assign(v.size(),0);
   #endif
   }

   return EXIT_SUCCESS;
}

Sonuç:std::fill, Diğerleri en deyimsel dedi Çünkü) kullanın!

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Ionized Digital Air Studios

    Ionized Digi

    20 HAZİRAN 2009
  • Friday Night Cranks

    Friday Night

    27 Mayıs 2007
  • Jared Busch

    Jared Busch

    25 Mayıs 2011