Informator i Kina, dag 3

Tredje dagen av denna fem-dagars kurs i Advanced C++ and Threads Programming för en (välkänd) kund i Nanjing (södra Kina), koncentrerade sig på standard-biblioteket. Jag tog upp både de klassiska delarna och så klart även nyheterna i C++11.

Men först tänkte jag prata om det här med att ta seden dit man kommer. Det är ju en kolossalt vettigt princip. Men …, ibland så är det lättare sagt än gjort. Jag brukar gilla kinesisk mat där hemma, ni vet “biff med purjolök”, “kyckling med cashewnötter”, o.s.v. Men det man serveras här har inte ens en avlägsen likhet med kinamaten hemma. Tja, möjligen då riset.

Det där kan skapa en del problem, om det är som så att smaker och kryddning avviker allt för mycket från vad man är van vid. Och det gör de. Så även om jag äter lunch och smakar artigt på alla rätter, så har min mage en mycket bestämd åsikt, som är så långt från artigt man kan komma.

Tja, tur i alla fall att efter hemkomst till hotellet så kan man smita iväg till en närbelägen Starbucks för en Frappuccino Mocha att avnjutas i kvällsvärmen.

 

I dag hade jag en kompis bredvid mig; en liten lurvig sak med fyra ben och morrhår (se bild). Vi har f.ö. träffats tidigare i veckan.

Som nämndes inledningsvis, så var fokus idag på standard-biblioteket. Jag började med att prata om alla container klasser som finns. Dels linjära sekvenser som vector, deque och list och dels icke-linjära samlingar som set och map.

Nytt i C++11 är att det finns en ny linjär sekvenstyp som har fixerad kapacitet. Deklarationen array innebär att man skapar en array med exakt 10 element, varken mer eller mindre. Föredelen här är att man har mycket bättre typkontroll jämfört med en native-array.

Den stora nyheten annars, vad samlingstyper beträffar, är att C++ äntligen har hash-tabeller. Med typerna unordered_set<> respektive unordered_map<>, så har man i C++ motsvarande java.util.HashSet och java.util.HashMap i Java. Tidigare, så fanns bara typerna set<> och map<>, vilket i Java motsvarar java.util.TreeSet och java.util.TreeMap.

Det i mitt tycke mest spännande med biblioteket är alla algoritm-funktioner, såsom find_if, generate_n, transform, accumulate och många fler därtill. Jag gick igenom principerna för hur iteratorer definierar intervall, vilket sen används som indata-mängd för algoritm-funktionerna.

Eleverna fick idag bl.a. göra en kul övning, som innebar att läsa in alla ord från Shakespeares samlade verk (ASCII fil) och lägga in dem i en map och p.s.s. hålla reda på hur ofta ett visst ord förekommer i hans texter. Visste du att (bortsett från bindeord o.likn.) ordet lord förekommer mest med 2929 förekomster följt av king (2885), good (2647) och sir (2615), medan ordet hamlet bara förekommer 110 gånger.

Förutom att prata om övriga delar av biblioteket, gick jag också igenom principerna för hur man implementerar smarta pekare och att det numera i C++11, finns stöd för både singleton-pekare (unique_prt) och pekare med referens-räkning (shared_ptr).

Till sist, en genomgång av design mönstret RAII; som innebär att man låter ett hjälpobjekt allokera en resurs i konstruktorn och av-allokera denna i destruktorn. RAII används överallt i C++ och vi kommer att använda det i morgon, när vi ska implementera mutex-lås.

Tjong tjong från Nanjing /jens