Vajon jó használni std
Rendszeresen van viták a kollégákkal, hogy használjon std :: húr mindenhol. vagy kell még megvalósítani az osztály vonalak.
Az egyik kérdés - a kérdés a minőségi végrehajtása a std :: húr. Vicces, hogy az emberek többsége azt kérte, hogy felvázoljuk a prototípus az osztály, a vonalak, többé vagy kevésbé hatékonyak a memóriát, írta a következőket:
Nyilvánvaló, hogy egy ilyen megvalósítása egy értékadás vonal szempontjából memória csak növekszik. Ez szándékos.
Gyakorlatilag semmi egyszer gondolt, hogy szükség van egy mozgó művelet pl csere. Valahogy jelenléte egy másolatot a kivitelező, valamint értékadó operátor elegendőnek tekinthető.
Hogy ezt a kérdést megválaszolni, egyszer és magam írtam egy teszt program. Ez a program úgy rendezi az array hosszú szálakat. Strings képviselteti négyféleképpen: az objektum std :: húr. mutató, amely egy std :: húr. saját készítésű objektumosztály String (Lásd fent.), és egy mutató a karakterlánc.
Az előzetes becslések szerint nyilvánvaló a munka révén az index legyen olyan hatékony, mint ebben az esetben, amikor a mozgó tárgyak fizikailag std :: sort () ülteti az egyetlen jel, nem magukat a tárgyakat.
De amikor közvetlenül dolgozik a tárgyak érdekes lesz összehasonlítani, hogy banális megvalósítása sor fog járulni std :: húr.
Látható, hogy a változat mutatókat dolgozott megközelítőleg egyforma gyors, de ha dolgozik tárgyak std :: húr megelőzte a végrehajtását saját készítésű 4 alkalommal - 203 ms vs. 891 ms.
Ez könnyű megérteni, hogy miért van ez így. std :: sort () átrendezni elemek sablon segítségével funkciót std ::-swap (). amely std :: string végre annak érdekében, hogy egy permutációs anélkül, hogy fizikailag másolja át az adatokat. És karakterlánc minden közhely az egész másolat kivitelező és értékadó operátor.
Általában magam, elmúlt, nincs szükség a kerítés a kertben, mert a legtöbb esetben, std :: húr megoldja az összes problémát. De felmerül a kérdés - hogyan kell hozzáadni std :: húr annak működését? Például egy keresést a szavakat.
A probléma az, hogy std :: húr destruktor nyilvánították a nem virtuális (talán ez történik hatékonysági okokból), és az örökség egy osztályban nem virtuális destruktor C ++ nem a leginkább megfelelő ötlet.
Bár tudtuk, hogy tagja függvény visszatérési hossza, akkor jobb, ha ez egy globális barátja funkciót. Ha így teszünk, képesek leszünk végül meghatározni ugyanazt a funkciót dolgozni beépített tömbökkel és fokozottabb egységessége design. Csináltam mérete egy tag függvény STL egy kísérletet, hogy kérjük a standard bizottság. Tudtam, hogy kezdődik, vége és mérete nem lehet globális funkciók, de nem volt hajlandó kockáztatni egy másik harcot a bizottság.
Úgy véli, hogy a globális sablon funkció length () - helyesebb, mint a hossza () tagjaként az osztályban. Ha nem a szabványosítási bizottság - így lenne STL.
Tehát, összefoglalni a fenti, nem szükséges, hogy bízik std :: húr. A legtöbb esetben, ez az osztály minden problémára megoldást jelent. Ha szüksége van a funkcionalitás - meg kell tenni végrehajtása révén egy általános algoritmust.
Van egy megjegyzést vagy tiltakozás? Alkalmazni.