Skip to main content

How To Think Like a Computer Scientist C++ Edition The Pretext Interactive Version

Section 10.6 Vector functions

The best feature of a vector is its resizeability. A vector, once declared, can be resized from anywhere within the program. Suppose we have a situation where we input numbers from the user and store them in a vector till he inputs -1, and then display them. In such a case, we do not know the size of the vector beforehand. So we need wish add new values to the end of a vector as the user inputs them. We can use then vector function push_back for that purpose.
Listing 10.6.1. A program that reads in numbers, adding each to a vector, until the user inputs -1.
#include <iostream>
#include <vector>
using namespace std;

int main() {
  vector<int> values;
  int c, i;
  size_t len;
  cin >> c;

  while (c != -1) {
    values.push_back(c);
    cin >> c;
  }
  len = values.size();
  for (i = 0; i < len; i++) {
    cout << values[i] << endl;
  }
}

Note 10.6.1.

push_back adds a specified element to the end of the vector, pop_back removes element from the end of a vector.
Listing 10.6.2. This active code uses the push_back function to add even numbers less than or equal to 10 to the vector values.

Checkpoint 10.6.1.

Let nums be the vector { 0, 1, 2, 3, 4 }. If we run the command nums.push_back(3), what will be returned by nums.size()?
  • Incorrect! This is the size of the vector before we ran the command.
  • Correct!
  • Incorrect!
  • Incorrect! We are adding the element 3 to the end of the vector, not 3 elements!

Checkpoint 10.6.2.

Construct the make_even function that loops through vec, adds 1 to any elements that are odd, and returns the new vector.

Checkpoint 10.6.3.

What does the following code print?
vector<int> numbers(5);
int size = 5;
for (int i = 0; i < size; i++) {
   numbers[i] = i;
}

int end = 4;

for (int i = 0; i < size; i++) {
   numbers[i] = numbers[end];
   end--;
}

for (int i = 0; i < size; i++) {
   cout << numbers[i] << "  ";
}

cout << endl;
  • 4 3 2 1 0
  • we change the numbers in the first half of the vector before we copy them to the second half
  • 4 3 2 3 4
  • when i is 3 we copy from end = 1 copying the values we already changed.
  • 0 1 2 3 4
  • we change values in the second loop.
You have attempted 1 of 4 activities on this page.