STL, 2 değeri değiştirmek için genel std::swap
işlevini uygular. Şu şekilde sunulabilir:Tamsayı türleri için std :: takas ne kadar hızlı?
void swap_u(size_t& x, size_t& y)
{
x = x^y;
y = x^y;
x = x^y;
}
Sorularım:
- Ancak
template <class T> void swap (T& a, T& b) { T c(std::move(a)); a=std::move(b); b=std::move(c); }
, 2 tamsayılar takas bir XOR takas algoritması (http://en.wikipedia.org/wiki/XOR_swap_algorithm) bulunmaktadır Bugünlerde bir optimizasyon mu (
x86
veyaarm
)? - C++ standardı bu tür bir optimizasyonu destekliyor mu?
- Tam sayılar için uzmanlık alanına sahip olan gerçek bir STL uygulaması var mı?
XOR takas, verimli bir optimizasyon değil - daha kullanışlı bir optimizasyondan daha fazla bir yeniliktir - sadece geçici bir değişken kullanın, basit tutun ve hilelerden kaçının - derleyicinin zeki şeyleri yapmasına izin verin. –
İkinci uygulama, x ve y aynı bellek adresine işaret ediyorsa (değişken indekslere sahip dizi öğelerini geçiriyorsanız gerçekleşebilir) çalışmaz. – sudeepdino008
Geçici bir kayıt kullanarak swapping daha hızlı olmalıdır. Ve derleyicinin ilk durumda yapması gereken budur. – lapk