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.

Kapcsolódó cikkek