## With Safari, you learn the way you learn best. Get unlimited access to videos, live online training, learning paths, books, tutorials, and more.

No credit card required

# 6.1. Using vectors Instead of Arrays

## Problem

You have to store things (built-in types, objects, pointers, etc.) in a sequence, you require random access to elements, and you can't be confined to a statically sized array.

## Solution

Use the standard library's `vector` class template, which is defined in `<vector>`; don't use arrays. `vector` looks and feels like an array, but it has a number of safety and convenience advantages over arrays. Example 6-1 shows a few common `vector` operations.

Example 6-1. Using common vector member functions

```#include <iostream>
#include <vector>
#include <string>

using namespace std;

int main() {

vector<int>    intVec;
vector<string> strVec;

// Add elements to the "back" of the vector with push_back
intVec.push_back(3);
intVec.push_back(9);
intVec.push_back(6);

string s = "Army";

strVec.push_back(s);
s = "Navy";
strVec.push_back(s);
s = "Air Force";
strVec.push_back(s);

// You can access them with operator[], just like an array
for (vector<string>::size_type i = 0; i < intVec.size(); ++i) {
cout << "intVec[" << i << "] = " << intVec[i] << '\n';
}

// Or you can use iterators
for (vector<string>::iterator p = strVec.begin();
p != strVec.end(); ++p) {
cout << *p << '\n';
}

// If you need to be safe, use at() instead of operator[].  It
// will throw out_of_range if the index you use is > size().
try {
intVec.at(300) = 2;
}
catch(out_of_range& e) {
cerr << "out_of_range: " << e.what() << endl;
}
}```

## Discussion

In general, if you need to use an array, you should use a `vector ...`

## With Safari, you learn the way you learn best. Get unlimited access to videos, live online training, learning paths, books, interactive tutorials, and more.

No credit card required