1 Main Index Conten ts 1 Main Index Conten ts NCurses (curses.h) NCurses (curses.h) Background Background Curses “Hello World” Curses “Hello World” Initializing & Shutting Initializing & Shutting down down Moving cursor Moving cursor I/O (printw, scanw & I/O (printw, scanw & getch) getch) Color Color Using Special keys (F1, Using Special keys (F1, …) …) Using the Mouse Using the Mouse Examples Examples hi.cpp hi.cpp mvbox.cpp mvbox.cpp mvboxM.cpp mvboxM.cpp tttCM.cpp tttCM.cpp CSE 331 - Lecture CSE 331 - Lecture 9 9 Chapter 6 Chapter 6 Shifting blocks of Shifting blocks of elements… elements… Model of a list Model of a list object… object… Sample list Sample list The list ADT The list ADT CLASS list CLASS list Constructors Constructors CLASS list Operations CLASS list Operations CLASS list::iterator CLASS list::iterator Operations Operations Inserting an element Inserting an element into a list into a list Removing an element Removing an element from a list from a list Ordered lists Ordered lists Splicing two lists Splicing two lists Summary Slides Summary Slides
40
Embed
Main Index Contents 11 Main Index Contents NCurses (curses.h) Background Curses “Hello World” Initializing & Shutting down Moving cursor I/O (printw, scanw.
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
1 Main IndexMain Index ContentsContents1 Main IndexMain Index ContentsContents
NCurses (curses.h)NCurses (curses.h)
BackgroundBackgroundCurses “Hello World”Curses “Hello World”Initializing & Shutting downInitializing & Shutting downMoving cursorMoving cursorI/O (printw, scanw & getch)I/O (printw, scanw & getch)ColorColorUsing Special keys (F1, …)Using Special keys (F1, …)Using the MouseUsing the MouseExamples Examples
Shifting blocks of elements…Shifting blocks of elements…Model of a list object…Model of a list object…Sample listSample listThe list ADTThe list ADTCLASS list ConstructorsCLASS list ConstructorsCLASS list OperationsCLASS list OperationsCLASS list::iterator CLASS list::iterator OperationsOperationsInserting an element into a listInserting an element into a listRemoving an element from a Removing an element from a listlistOrdered listsOrdered listsSplicing two listsSplicing two listsSummary SlidesSummary Slides
Supports mouse, keypads, color, buffered & non-buffered input, and some simple graphics (lines, boxes, etc)
3 Main IndexMain Index ContentsContents
Curses (Windows, etc)Curses (Windows, etc) Curses works by creating a window / screen /
console data structure within which the program moves the cursor and performs output
A refresh() function updates the actual window / screen / console to reflect the logical one
See class web site for URLs of Curses resources / tutotrials / examples/ etc.
4 Main IndexMain Index ContentsContents
Curses BasicsCurses Basics#include<curses.h>int main(){ // always do this first initscr(); // initialize curses
// these are optional cbreak(); // input keys immediately available noecho(); // stop echoing inputs nonl(); // faster cursor movement
// move cursor to location and output message // upper left screen corner is 0,0 move(12,5); // move cursor to row 12, column 5 printw(“Hello World\n”); // instead of cout << ... refresh(); // make it visible to us getch(); // wait for a key to be hit
endwin(); // release window back to shell return 0;}
Curses Curses Using Special KeysUsing Special Keys
To use function keys, arrows, etc. Initialize with– keypad(stdscr,TRUE);– Must be used before both special key input– And before mouse event capture– prevents immediate translation to ASCII
Get key with– int key = getch();
Test key with keycodes– KEY_DOWN, KEY_UP, KEY_LEFT, KEY_RIGHT– KEY_HOME, KEY_BACKSPACE– KEY_F(n) Function keys, for 0 <= n >= 63 – KEY_DC Delete character – KEY_IC Insert char or enter insert mode – KEY_ENTER Enter or send
11 Main IndexMain Index ContentsContents
Curses Mouse SupportCurses Mouse Support Only in Ncurses (Linux & AIX) Initialize for capture of events with
– mousemask(ALL_MOUSE_EVENTS,NULL); Specific masks (BUTTON1_CLICKED, ...)
Read mouse click with – int key = getch(); or – int key = wgetch(stdscr);
– Value read will equal KEY_MOUSE– Use getmouse(&event) to recover event from event queue– Use event.bstate to determine button state (which event)– Use event.x and event.y to determine where mouse was
clicked in window
MEVENT event; // data type for mouse event
if (key == KEY_MOUSE) // if it was the mouse
if (getmouse(&event) == OK) { // get the event
if (event.bstate & BUTTON1_CLICKED) {
// so do something with
// event.y; and event.x;
13 Main IndexMain Index ContentsContents
Example Curses ProgramsExample Curses Programs Source Code is on Class Web Site
Hi– Simple curses “Hello World” program
Mvbox– Moving star shape– Uses keyboard (letter) inputs
mvboxM– Moving star shape– Uses keyboard, special keys, and mouse input
tttCM– TicTacToe– Uses Color, mouse and keyboard inputs
14 Main IndexMain Index ContentsContents
Shifting blocks of elements to Shifting blocks of elements to insert or delete a vector iteminsert or delete a vector item
15 20 30 35 40Initial V ec to r
30 3515 40
20
Eras e 20 atP o s itio n 1
S hift left0 4321
15 20 30 35 4025Ins ert 25 at
P o s itio n 2
S hift right
32
10 54
15 20 30 35 40Initial V ec to r
0 4321 210 3
15 Main IndexMain Index ContentsContents15 Main IndexMain Index ContentsContents
Model of a list object with links Model of a list object with links to next and previous elementto next and previous element
fro nt b ac k
16 Main IndexMain Index ContentsContents16 Main IndexMain Index ContentsContents
The List ADTThe List ADT The list API documents the member function
prototype as well as pre- and postconditions.– provides three constructors to declare a list object.
0 .00 .0 0 .00 .0 0 .00 .0 0 .00 .0(a) lis t< d o ub le> realL is t(8)
(c ) lis t< s tring> s trL is t(s trA rr, s trA rr+ 3)l is tve c to r
17 Main IndexMain Index ContentsContents17 Main IndexMain Index ContentsContents
CLASS list Constructors <list>
list();Create an empty list. This is the default constructor.
list(int n, const T&value = T());Create a list with n elements, each having a specified value. If the value argument is omitted, the elements
are filled with the default value for type T. Type T must have a default constructor, and the default value of type T is specified by the notation T().
list(T *first, T *last);Initialize the list, using the address range [first, last).
18 Main IndexMain Index ContentsContents18 Main IndexMain Index ContentsContents
CLASS list Operations <list>
T& back();Return the value of the item at the rear of the list. Precondition: The vector must contain at least one
element.
bool empty() const;Return true if the vector is empty, false otherwise.
T& front();Return the value of the item at the front of the list. Precondition: The vector must contain at least one
element.
19 Main IndexMain Index ContentsContents19 Main IndexMain Index ContentsContents
CLASS list Operations <list>
void push_back(const T& value);Add a value at the rear of the list. Postcondition: The list has a new element at the
rear, and its size increases by 1.
void pop_back();Remove the item at the rear of the list. Precondition: The list is not empty. Postcondition: The list has a new element at the rear
or is empty.
20 Main IndexMain Index ContentsContents20 Main IndexMain Index ContentsContents
CLASS list Operations <list>
void push_front(const T& value);Add a value at the front of the list. Postcondition: The list has a new element at the
front, and its size increases by 1.
void pop_front();Remove the item at the front of the list. Precondition: The list is not empty. Postcondition: The list has a new element at the front
or is empty.
int size() const;Return the number of elements in the vector.
21 Main IndexMain Index ContentsContents21 Main IndexMain Index ContentsContents
CLASS list Operations <list>
iterator begin();Returns an iterator that references the first position
(front) of the list. If the list is empty, the iterator value end() is returned.
const_iterator begin();Returns a const_iterator that points to the first position (front) of a constant list. If the list is empty, the
const_iterator value end() is returned.
iterator end();Returns an iterator that signifies a location immediately out of the range of actual elements. A program must
not dereference the value of end() with the * operator.
22 Main IndexMain Index ContentsContents22 Main IndexMain Index ContentsContents
CLASS list Operations <list>
iterator end();Returns an iterator that signifies a location immediately out of the range of actual elements. A program must
not dereference the value of end() with the * operator.
const_iterator end();Returns a const_iterator that signifies a location
immediately out of the range of actual elements in a constant list. A program must not dereference the value of end() with the * operator.
23 Main IndexMain Index ContentsContents23 Main IndexMain Index ContentsContents
CLASS list Operations <list>
void erase(iterator pos);Erase the element pointed to by pos.Precondition: The list is not empty.Postcondition: The list has one fewer element.
void erase(iterator first, iterator last);Erase all list elements within the iterator range [first,
last].Precondition: The list is not empty.Postcondition: The size of the list decreases by the
number of elements in the range.
24 Main IndexMain Index ContentsContents24 Main IndexMain Index ContentsContents
CLASS list Operations <list>
iterator insert(iterator pos, const T& value);Insert value before pos, and return an iterator pointing to the position of the new value in the list. The
operation does not affect any existing iterators.Postcondition: The list has a new element.
25 Main IndexMain Index ContentsContents25 Main IndexMain Index ContentsContents
CLASS list::iterator Operations <list>
*:Accesses the value of the item currently pointed to by the iterator.
*iter;*iter;
++: Moves the iterator to the next item in the list. iter++;iter++;
--: Moves the iterator to the previous item in the list.
iter--;iter--;
==: Takes two iterators as operands and returns true when they both point at the same item in the list.
iter1 == iter2iter1 == iter2
!=: Returns true when the two iterators do not point at the same item in the list.
iter1 != iter2iter1 != iter2
26 Main IndexMain Index ContentsContents
PalindromesPalindromes Strings that read the same forwards and
backwards Spaces and punctuation are ignored
Approaches (using lists) 1 – Pop matching pairs of 1st & last chars 2 – Scan inward to middle, matching
corresponding outermost pairs
27 Main IndexMain Index ContentsContents
Palindrome (pop matches)Palindrome (pop matches)// Assume spaces & punctuation removed// by caller; all letters in lower case
template<typename T>bool isPal_1(const list<T>& alist) { list<T> copyList; copyList = alist; while (copyList.size() > 0) { if (copyList.front() != copyList.back()) return false; // mismatch, not a palindrome // pop matching pair copyList.pop_front(); copyList.pop_back(); } return true; // all pairs matched & popped}
28 Main IndexMain Index ContentsContents
Palindrome (scan inward)Palindrome (scan inward)// Assume spaces & punctuation removed// by caller; all letters in lower case
template<typename T>bool isPal_2(const list<T>& alist) { list<T>::iterator left, right; left = alist.begin(); right = alist.end(); right--; while (left != right) { if (*left != *right) return false; // mismatch, not a palindrome right--; // move right iter 1 posit left if (left == right) return true; // even length string, we’re done left++; // move left 1 posit right } return true; // all pairs matched & popped}
// insert item ahead of *curr orderedList.insert(curr, item);}
35 Main IndexMain Index ContentsContents
Removing DuplicatesRemoving Duplicates// assume list is ordered. This way we can jump curr// ahead as soon as we find *p != *currtemplate<typename T>void removeDups (list<T>& orderedList) { list<T>::iterator curr, p; curr = orderedList.begin(); while (curr != orderedList.end()) { p = curr; p++; while ((p != orderedList.end() && (*p == *curr)) // pass p, move p forward, and call erase orderedList.erase(p++); curr = p; }}
36 Main IndexMain Index ContentsContents36 Main IndexMain Index ContentsContents
Summary Slide 1Summary Slide 1
§- list - A Sequence of elements stored by position.
- Index access is not available…§- to access the value of an element, must pass
through its preceding elements.
§- list iterator- A generalized pointer that moves through a list
element by element… forward or backward
- At any point, the * operator accesses the value of a list item.
37 Main IndexMain Index ContentsContents37 Main IndexMain Index ContentsContents
Summary Slide 2Summary Slide 2
§- The list class has two iterator types:1)1) iteratoriterator:
A generalized list traversal pointer.
2)2) constconst __ iteratoriterator:
must be used with a constant list object. Each type is a nested class of list and must be
accessed by using the scope operator ::::
38 Main IndexMain Index ContentsContents38 Main IndexMain Index ContentsContents
Summary Slide 3Summary Slide 3
§- the list member function begin()- Gives an iterator an initial value that points to the
first element.
§- the list member function end()- Returns an iterator pointing just past the last
element of the list.
39 Main IndexMain Index ContentsContents39 Main IndexMain Index ContentsContents
Summary Slide 4Summary Slide 4
§- The sequential search of a list object- implemented by using an iterator range
[firstfirst, lastlast).
- It returns an iterator that points at the target value or has value lastlast if the target is not in the list.
40 Main IndexMain Index ContentsContents40 Main IndexMain Index ContentsContents
Summary Slide 5Summary Slide 5
§- list class member fns insert() and erase()
- Both use an iterator argument to modify a list.
1)1) insert(pos)insert(pos): places value in the list before the data
referenced by the iterator pospos.
2)2) erase(pos)erase(pos):removes the data item referenced by pospos from the list.