Lecture18 Vectors
Lecture18 Vectors
Vector Class
What is a class?
Data type
Defines operations –
○ []
○ size(), push_back(), pop_back(),
resize(), clear()
#include <vector>
vector<dataType> varName;
Compare …
Array declaration
int list[]; // contains no values
Vector declaration
vector<int> list; // contains no values
Variable
Contains default values (later) Declaration
vector<int> list(5);
vector<int> temps(3); 0 1 2
temps[0] = 79;
temps.at(1) = 90; 79 90 81
temps[2] = 81;
vector<int> temps(3);
cout << temps.size(); // Displays 3
Observation:
{ 02, 12, 22, 32, 42, 52 }
int main()
{
vector<int> v(6);
return 0;
}
return 0;
}
cout << "Enter list of " << ARRAY_SIZE << " integers: ";
for (int i = 0; i < ARRAY_SIZE; i++)
{
cin >> list[i];
}
cout << "Enter list of " << ARRAY_SIZE << " integers: ";
for (int i = 0; i < ARRAY_SIZE; i++)
{
cin >> list[i];
}
> reverse.exe
Enter list of 5 integers: 1 2 3 4 5
Reverse list: 5 4 3 2 1
vector<int> list(n);
cout << "Enter list of " << list.size() << " integers: ";
for (int i = 0; i < list.size(); i++)
{ cin >> list[i]; }
...
vector<int> list(n);
cout << "Enter list of " << list.size() << " integers: ";
for (int i = 0; i < list.size(); i++)
{ cin >> list[i]; }
> reverse2.exe
Enter length of list: 7
Enter list of 7 integers: 1 2 3 4 5 6 7
Reverse list: 7 6 5 4 3 2 1
vector<int> grades; 78 81 65
0 1 2 3
grades.push_back(78);
grades.push_back(81); 78 81 65 90
grades.push_back(65);
0 1 2 3 4
grades.push_back(90);
grades.push_back(99); 78 81 65 90 99
grades.push_back(78);
78 81 65 90 99
grades.push_back(81);
grades.push_back(65); 0 1 2 3
grades.push_back(90);
grades.push_back(99); 78 81 65 90
grades.pop_back(); // removes 99 0 1 2
grades.pop_back(); // removes 90
78 81 65
The Ohio State University 35
Vector Class: The erase() function
The erase() function removes a value at a specific
position
Decreases the size of the list by 1
Does not return the value removed
vector<int> grades;
0 1 2 3 4
grades.push_back(78);
grades.push_back(81);
grades.push_back(65);
78 81 65 90 99
grades.push_back(90);
grades.push_back(99);
0 1 2 3
grades.erase(grades.begin()+2);
// removed 65 78 81 90 99
vector<int> grades;
0 1 2
grades.push_back(78);
grades.push_back(81); 78 81 65
grades.push_back(65); 0 1 2 3 4
grades.resize(5, 27);
78 81 65 27 27
0 1 2 3
grades.resize(4); 78 81 65 27
Grades.resize(5); 0 1 2 3 4
78 81 65 27 0
The Ohio State University 37
Vector Class: The clear() function
grades.clear();
Use a vector
Use the push_back() function
> reverse3.exe
Enter list of positive integers (ending in 0): 1 2 3 4 0
Reverse list: 4 3 2 1
...
int val; Does not use pushback()
vector<int> list;
> reverseError.exe
Enter list of positive integers (ending in 0): 1 2 3 0
Segmentation fault
Use a vector
Use the push_back() function
if (list.size() > 0)
{
vmax = findVectorMax(list);
cout << "Maximum integer = " << vmax << endl;
}
...
if (list.size() > 0)
{
vmax = findVectorMax(list);
cout << "Maximum integer = " << vmax << endl;
}
...
> vectorMax1.exe
Enter list of positive integers (ending in 0): 2 3 7 4 3 0
Maximum integer = 7
#include <algorithm>
For example,
{ 5, 9, 10, 2 }
{ 5, 9, 10, 2 }
{ 9, 5, 10, 2 }
{ 10, 5, 9, 2 }
{ 10, 5, 9, 2 }
moveMax(array_A, SIZE_A);
moveMax(array_B, SIZE_B);
return 0;
}
if (list.size() > 0)
{
moveVectorMax(list);
cout << "Maximum integer = " << list[0] << endl;
}
...
The vector
{ 5, 9, 10, 2 }
change to
{ 2, 10, 9, 5 }
int main()
{
vector<int> list;
list.push_back(11);
list.push_back(12);
list.push_back(13);
return 0;
}
The Ohio State University 62
reverseError2().cpp
// function prototypes
void reverse(vector<int> v);
void print_list(const char label[], const vector<int> v);
int main()
{
vector<int> list;
list.push_back(11);
list.push_back(12);
list.push_back(13);
return 0;
}
What happened?
Why no reverse?
> reverseError2.exe
List: 11 12 13
Reverse List: 11 12 13
// print list
void print_list(const char label[], const vector<int> v)
{
cout << label;
for (int i = 0; i < v.size(); i++)
{ cout << v[i] << " "; } Bad
cout << endl; Performance
}
The Ohio State University 64
reverse5().cpp
// function prototypes
void reverse(vector<int> & v);
void print_list(const char label[], const vector<int> & v);
int main()
{
vector<int> list;
list.push_back(11);
list.push_back(12);
list.push_back(13);
return 0;
}
The Ohio State University 65
reverse5().cpp
// reverse list
void reverse(vector<int> & v)
{
int n = v.size();
for (int i = 0; i < n/2; i++)
{
swap(v[i], v[n – 1 - i]);
}
}
// print list
void print_list(const char label[], const vector<int> & v)
{
cout << label;
for (int i = 0; i < v.size(); i++)
{ cout << v[i] << " "; }
cout << endl;
}
The Ohio State University 66
Standard Template Library (STL): sort()
The sort function is defined in the library
algorithm
#include <algorithm>
#include <vector>
sort(list.begin(), list.end());
for (int i = 0; i < list.size(); i++) {
cout << list[i] << " ";
}
cout << endl;
...
cout << "Enter list of strings (ending with the string \".\"): ";
cin >> s;
while (s != ".") {
cin >> s;
list.push_back(s); // add element s to back of list
}
sort(list.begin(), list.end());
for (int i = 0; i < list.size(); i++) {
cout << list[i] << " ";
}
cout << endl;
...
Note:
C++ vectors are implemented using C arrays
// function prototype:
double calculateTotalSalaries(const vector<int> &);
int main( ){
int numberOfSalaries(0), salary, i;
double totalSalaries;
vector<int> salaries;
cout << "Enter salaries; end with zero: ";
cin >> salary;
while (salary > 0) {
salaries.push_back(salary);
cin >> salary;
}
totalSalaries = calculateTotalSalaries(salaries);
cout << fixed << setprecision(2);
cout << "Total salaries paid = " << totalSalaries << endl;
CSE1222: Lecture 18 The Ohio State University 73
Salary Analysis (continued)
cout << "Average salary paid = "
<< totalSalaries / salaries.size() << endl;
sort(salaries.begin(), salaries.end());
cout << "All salaries (lowest to highest): ";
for(i=0; i<salaries.size(); i++)
cout << 1.0 * salaries[i] << " ";
cout << endl;
return 0;
}