Presentation is loading. Please wait.

Presentation is loading. Please wait.

Vectors the better arrays.

Similar presentations


Presentation on theme: "Vectors the better arrays."— Presentation transcript:

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) making them more powerful vectors can grow and shrink as needed be compared and assigned as a whole be passed by reference/value/returned vector size is always available still more … part of the so called Standard Template Library (STL) once you have learned vectors, you do not want to use (raw) arrays anymore.

3 Declaration include <vector> header file using std::vector;
to declare vector<type_parameter> vectorName; where type_parameter – type/class of vector elements corresponds to base type of the array examples vector<int> items; // declares vector with no elements vector<double> nums(5); // declares vector with 5 elements vector<myclass> things(5); // declares a vector of 5 objects of myclass

4 Typical Array Operations
indexing: items[3] still 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(void); can assign vector<int> 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(void) 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 vector<type_parameter>::iterator iteratorName;
iterator is a generalization of pointer not a pointer but usually implemented using pointers further enhances the power of vector declaring iterator vector<type_parameter>::iterator iteratorName; where type_parameter – type/class of elements example vector<int>::iterator p;

9 Iterators Operations operations
++ (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 and after in the vector 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 (deletes) one element at // iterator ip position sorting elements: sort(items.begin(),items.end()); need algorithm header caution: after altering a vector (inserting/erasing/sorting), iterators are invalidated and cannot be used unless given a value again (reassigned).

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 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

12 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 a 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 an iterator? how is it used? what is typedef? How is it used? What are begin() and end()?


Download ppt "Vectors the better arrays."

Similar presentations


Ads by Google