SORU
2 ŞUBAT 2015, PAZARTESİ


Kopyala/taşı atama std::vector::Sil() ve std::deque::sil()

another question yanıtlama sürecinde üzerine std::vector::erase() std::deque::erase() için biraz farklı ifadelere rastladım.

Bu C 14 std::deque::erase ([deque.modifiers]/4-6, vurgu benim): "der

Etkileri:...

Karmaşıklık:Yıkıcı çağrı sayısı unsurları sildim sayısı olarak aynı ama. Bu çağrı sayısıatama operatörüdaha az öğe sayısından daha fazla. Silinen öğeler ve Silinmiş Öğeler sonra eleman sayısını önce.

Atar:Özel bir durum olmadıkça hiçbir şey T kopya kurucu, yapıcı hareket, atama operatörü, ya da hareket atama operatör tarafından atılır.

Ve buradastd::vector::erase ([vector.modifiers]/3-5): hakkında ne diyor

Etkileri:...

Karmaşıklık:T yıkıcı kere unsurları sildim sayısı, ama eşit deniratama operatörü taşıyınT denilen kere sildim elemanları sonra vektör öğe sayısı eşit.

Atar:Özel bir durum olmadıkça hiçbir şey T kopya kurucu, yapıcı hareket, atama operatörü, ya da hareket atama operatör tarafından atılır.

Gördüğünüz gibi, her ikisi için de durum özellikleri aynıdır, ancak std::vector taşımak için atama operatör denir açıkça belirtilmişti.

Orada da gereği için T MoveAssignable erase() ile de std::vector std::deque (Tablo 100), ama bu yok anlamına gelmez varlığının hareket atama operatörü: bir define bir kopya atama operatör ve tanımlamak taşımak atama operatörü, ve bu sınıf olacak MoveAssignable.

Her ihtimale karşı kontrol ettim ile GCC ve Tin ve gerçekten std::vector::erase() çağrı kopya atama operatör eğer hareket atama operatörü ve std::deque::erase() mu aynı (DEMO).

Bir şey mi kaçırdım, ya da bu standart (editör) bir sorun mu? soru bu:

Güncelleme: LWG issue #2477 teslim ettim.

CEVAP
16 Aralık 2013, PAZARTESİ


Ben de, ben sadece MSCVC 2012 ile C Qt5 ve W7 64bits ile aynı sorunu çözülmüş.

Başlangıçta MSVC/windows dll bir sorun olduğunu düşündüm, ama BorisP dediği gibi, sorun proje benim bağımlılıkları vardı. Anahtarıdır "Nasıl Qt5, proje bağımlılıkları bilmek?".

Olarak bulamadım herhangi açık bir şekilde bilmek (Bağımlılık Wolker yardımı olmadı bana bir sürü...), ardından gelecek "ters işlem" o alır en fazla 5 dakika ve önlemek bir sürü baş ağrısı ile DLL bağımlılıkları:

  1. Projeyi derleyin ve boş bir klasöre çalıştırılabilir dosya:myproject.exe
  2. Çalıştırmak için deneyin, bir hata alır (DLL eksik...).
  3. Şimditüm DLL kopyalayın(benim durumumda c:\qt\qt5.1.1\5.1.1\msvc2012_64_opengl\bin onlar bu klasör için Qt.
  4. Tekrar çalıştırmak için deneyin, muhtemelen sorunsuz çalışıyor.
  5. Kademeli silme ve yürütülebilir hala çalışıyor her zaman, en az gerekli DLL yaşamaya devam etmek daha kolay.

Ne zaman tüm DLL dosyaları aynı klasörde olduğunu bulmak daha kolay ben değil geçerli (XML, y... her neyse..) , sonuç olarak bu yöntemi sakın fazla beş dakika.

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • echifitness

    echifitness

    9 Kasım 2008
  • Jeremy Gallman

    Jeremy Gallm

    11 NİSAN 2012
  • newreleaseblitz

    newreleasebl

    13 Ocak 2010