Download presentation
Presentation is loading. Please wait.
Published byGloria Rogers Modified over 8 years ago
1
Vectors the better arrays
2
Why Vectors l vectors are implemented as a class (a template to be exact) l they serve the same purpose as arrays but using object oriented mechanisms (such as operator overloading) made more powerful l vectors can n can grow and shrink as needed n can be compared, assigned as a whole n can be passed by reference/value/returned n vector size is always available n still more … l part of so called Standard Template Library (STL) l once you learned vectors, do not use (raw) arrays 2
3
Declaration include header file using std::vector; l to declare vector vectorName ; where typeParameter – type/class of vector elements –corresponds to base type of the array examples vector items; // declares vector with no elements vector items(5); // declares vector with 5 elements vector items(5); // declares a vector of 5 objects of myclass 3
4
Typical Array Operations indexing: items[3] sill cannot refer past vector size: items[6]++; // range error checking size: items.size() careful with this one: returns value of type size_t l example: for(size_t i=0; i < items.size(); ++i) cout << items[i]; 4
5
Atypical Array Operations adding element: items.push_back(55); removing element: items.pop_back(); checking if empty: items.empty(); accessing first/last element: items.front(); items.back(); changing size: items.resize(newSize); emptying: items.erase(); l example: int num=0; cin >> num; while(num !=0){ items.push_back(num); cin >> num; } while(!items.empty()){ cout << items.back(); items.pop_back(); } 5
6
With Functions, Other Aggregate Operations l can pass by value/reference, return void myfunc(vector ); void myfunc(vector &); vector myfunc(); l can assign vector v; v = items; can swap: items.swap(v); can compare: if(v == items) … 6
7
With Objects class intData{ // elementary class definition public: void set(int n){data=n;} // simple setter int get() const{return data;} // simple accessor private: int data; }; … vector v(5); // declaring a vector of objects for(int i=0; i<5; ++i){ // using vector as array int num; cin >> num; v[i].set(num); // invoking a method on vector element } 7
8
Iterators l iterator is a generalization of pointer n not a pointer but usually implemented using pointers further enhances the power of vector l declaring iterator vector ::iterator iteratorName ; where typeParameter – type/class of elements l example vector ::iterator ip; 8
9
Iterators Operations l operations ++ (pre- and postfix) and -- to advance to the next (previous) data item +5 -3 advance certain number of positions forward/backward = = and != operators to test whether two iterators point to the same data item to compare if two elements are before or after in the vector dereferencing ( * ) provides data item access l functions v.begin() returns an iterator pointing to the first element of container v v.end() returns an iterator pointing past the last element of container v useful to compare for end of iteration inserting: v.insert(ip, 22); // inserts one element at // iterator ip position what does this do? v.insert(v.end()-2, 55); erasing: v.erase(ip); // erases one element at // iterator ip position sorting elements: sort(v.begin(),v.end()); need algorithm header l caution: after using iterator for update, iterators are invalidated, have to reassign 9
10
Iterator Usage Example vector v; // declare vector … for ( // declare and initialize iterator vector ::iterator p = v.begin(); p != v.end(); // check if end is not reached ++p // move iterator to next element ){ cout << *p; // manipulate element in loop body } 10
11
Typedef l variable declarations can get long and obscure program meaning typedef – allows to give names to already defined types and classes n note: no new types declared l benefits: shortens the code, gives more intuitive names, adds portability – can change defined type later if needed l syntax: typedef existingType newType; example typedef vector myVector; typedef myVector::iterator myVectorIterator; myVector v; for (myVectorIterator p=v.begin(); p != v.end(); ++p){ cout << *p; do not overdo – typedef s hide original types: give new types intuitive names, do not use for short/understandable types 11
12
Questions on Vectors l why use vectors instead of arrays? what header file is needed to use vectors? l how is vector declared? how to declare a vector of five integers? how can one determine the size of the vector? What is the size of this vector vector myvector(4); l how does one add/remove elements from a vector? l how does one get the first/last element from a vector? l can vectors be assigned to each other? What happens to their size? contents? compared with each other? when are they equal? l can vectors be passed by value? reference? returned? l can vectors contain objects? l what is iterator? how is it used? what is typedef ? How is it used? What are begin() and end() ? 12
Similar presentations
© 2024 SlidePlayer.com. Inc.
All rights reserved.