160 likes | 255 Views
CS2 in C++ Peer Instruction Materials by Cynthia Bailey Lee is licensed under a Creative Commons Attribution- NonCommercial - ShareAlike 4.0 International License . Permissions beyond the scope of this license may be available at http://peerinstruction4cs.org .
E N D
CS2 in C++ Peer Instruction Materials by Cynthia Bailey Lee is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License.Permissions beyond the scope of this license may be available at http://peerinstruction4cs.org. CS 106X – Programming Abstractions in C++ Dr. Cynthia Bailey Lee
Today’s Topics • Quick follow-up on queues • Queue Applications: Mouse event queue • Broad categories of ADTs • Map • Returning a reference • Map Applications: Anagram finder • Bacon Artists!
Queue Applications Mouse events
Event queues • While your code executes, a separate program is constantly listening for events and recording them • Mouse moved, mouse clicked, mouse dragged, keyboard key pressed, etc • Every once in a while, your code can call getNextEvent() to see what has happened • getNextEvent returns the events one at a time in the same order they happened • In other words, returns them in FIFO order! • When it is “recording” events, it is enqueuingevents in an event QUEUE • Very common use of the Queue ADT
Linear containers, AKA Sequential containers • Array • Vector • Stack Queue • The question “Which is the [1st/2nd/3rd…] element?” is coherent • Note: even though we can’t directly access 3rd element with Stack/Queue, there is one—there is an ordering
Associative containers • Map • Set • Lexicon • The question “Which is the [1st/2nd/3rd…] element?” is not coherent • They associate keys with values
map.h template<typenameKeyType,typenameValueType> classMap{public: Map(); virtual~Map(); intsize()const; boolisEmpty()const; voidput(constKeyType&key,constValueType&value); ValueTypeget(constKeyType&key)const; boolcontainsKey(constKeyType&key)const; voidremove(constKeyType&key); voidclear(); ValueType&operator[](constKeyType&key); ValueTypeoperator[](constKeyType&key)const; private: }; Redacted…until the second half of the quarter!
Review: reference parameters static void clearBoard(Grid<int> board){ for (inti=0; i<board.numRows(); i++) for (int j=0; j<board.numCols(); j++) board[i][j] = 0; } static void clearBoard(Grid<int>& board){ for (inti=0; i<board.numRows(); i++) for (int j=0; j<board.numCols(); j++) board[i][j] = 0; } Grid<int> tictactoe(3,3); tictactoe[0][0] = 2; clearboard(tictactoe); cout << tictactoe[0][0] << endl;
Returning a reference • C++ also allows you to define a return type to be a reference • Gives you a reference to the item being returned • In the case of map, this returns a reference to the value at map[key]: ValueType&operator[](constKeyType&key);
Returning a reference Map<string,Vector<int>>mymap; Vector<int>numbers; numbers.add(1); numbers.add(2); numbers.add(3); mymap["123"]=numbers; mymap["123"].add(4); cout<<“New size:"<<mymap["123"].size()<<endl; • Predict the outcome: (A) 3 (B) 4 (C) other # (D) Error
Returning a reference Map<string,Vector<int>>mymap; Vector<int>numbers; numbers.add(1); numbers.add(2); numbers.add(3); mymap["123"]=numbers; Vector<int>plainTest=mymap["123"]; plainTest.add(4); cout<<“New size:"<<mymap["123"].size()<<endl; • Predict the outcome: (A) 3 (B) 4 (C) other # (D) Error
Returning a reference Map<string,Vector<int>>mymap; Vector<int>numbers; numbers.add(1); numbers.add(2); numbers.add(3); mymap["123"]=numbers; Vector<int>referenceTest=mymap["123"]; referenceTest.add(4); cout<<“New size:"<<mymap["123"].size()<<endl; • Predict the outcome: (A) 3 (B) 4 (C) other # (D) Error
Map Applications Anagram finder
“Abstractions” • Bacon artists • Cab stain rots • Crab in toasts • Bonsai tracts • …