Download presentation
Presentation is loading. Please wait.
1
Vectors the better arrays
2
Why Vectors vectors are implemented as a class (a template to be exact) they serve the same purpose as arrays but using object oriented mechanisms (such as operator overloading) made more powerful vectors can can grow and shrink as needed can be compared, assigned as a whole can be passed by reference/value/returned vector size is always available still more … part of so called Standard Template Library (STL) once you learned vectors, do not use (raw) arrays
3
Declaration include <vector> header file using std::vector;
to declare vector<typeParameter> vectorName; where typeParameter – type/class of vector elements corresponds to base type of the array examples vector<int> items; // declares vector with no elements vector<double> items(5); // declares vector with 5 elements vector<myclass> items(5); // declares a vector of 5 objects of myclass
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 example: for(size_t i=0; i < items.size(); ++i) cout << items[i];
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(); example: int num=0; cin >> num; while(num !=0){ items.push_back(num); } while(!items.empty()){ cout << items.back(); items.pop_back();
6
With Functions, Other Aggregate Operations
can pass by value/reference, return void myfunc(vector<int>); void myfunc(vector<int>&); vector<int> myfunc(); can assign vector<int> v; v = items; can swap: items.swap(v); can compare: if(v == items) …
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<intData> 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 }
8
Iterators iterator is a generalization of pointer
not a pointer but usually implemented using pointers further enhances the power of vector declaring iterator vector<typeParameter>::iterator iteratorName; where typeParameter – type/class of elements example vector<int>::iterator ip;
9
Iterators Operations arithmetic
++ (pre- and postfix) and -- to advance to the next (previous) data item 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 subtract one iterator from another: gives distance dereferencing (*) provides data item access 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
10
Iterator Usage Example
vector <int> v; // declare vector … for ( // declare and initialize iterator vector<int>::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
11
Iterator Invalidation
after using iterator for update, iterators pointing to vector are invalidated, have to reassign invalidated iterator is loose: accessing is run-time error, result unspecified reason: dynamic storage allocation inside vector vector<int> v(5); vector<int>::iterator p; p = v.begin()+3; // p points to 4th element v.erase(v.begin()); // erases first element of the vector // this invaidates p cout << *p; // p is invalidated, result is unspecified // run-time error
12
Typedef variable declarations can get long and obscure program meaning
typedef – allows to give names to already defined types and classes note: no new types declared benefits: shortens the code, gives more intuitive names, adds portability – can change defined type later if needed syntax: typedef existingType newType; example typedef vector<int> myVector; typedef myVector::iterator myVectorIterator; myVector v; for (myVectorIterator p=v.begin(); p != v.end(); ++p){ cout << *p; do not overdo – typedefs hide original types: give new types intuitive names, do not use for short/understandable types
13
Questions on Vectors why use vectors instead of arrays? what header file is needed to use vectors? 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<int> myvector(4); how does one add/remove elements from a vector? how does one get the first/last element from a vector? can vectors be assigned to each other? What happens to their size? contents? compared with each other? when are they equal? can vectors be passed by value? reference? returned? can vectors contain objects? what is iterator? how is it used? what are begin() and end()? how does one add/remove elements in the middle of a vector? what is iterator invalidation? why does it happen? what is typedef? how is it used?
Similar presentations
© 2024 SlidePlayer.com. Inc.
All rights reserved.