DEV Community

Jess
Jess

Posted on

C++ Vectors

A vector is similar to a standard array, but can be dynamic. This means it does not have a fixed size and can be resized as needed. It is part of the Standard Template Library (STL) and must be included in your file with #include <vector>.

Like regular arrays, you specify a data type and name. You can specify a size to initialize the vector if you want, and you can also specify what you want to initialize each index of the vector with. You can also initialize a vector with the contents of another vector.

std::vector<int> numsA;
std::vector<int> numsB(5);
std::vector<int> numsC(5, 9);
std::vector<int> numsD(numsC);
Enter fullscreen mode Exit fullscreen mode

numsA is a vector of size 0. numsB is a vector of size 5 and each index is initialized with the value 0. numsC is a vector of size 5 and each index is initialized with the value 9. Finally, numsD is initialized to copies of the contents of numsC, which makes it a vector of size 5 filled with 9s as well.

Manipulation

You can retrieve the element stored at an index as well as alter the value at that index.

  • v.at(index) returns the element at the specified index
  • v[index] returns the element at the specified index
  • v.front() returns the first element
  • v.back() returns the last element

Keep in mind, front() and back() do not check to make sure the vector is empty or not. If it is, your code will compile but it will halt and you'll get a EXC_BAD_ACCESS error. You will also get an out_of_range error if you try to use at() with an index that is out of range of the one you created.

// create a char array of size 4
std::vector<char> alpha(4);

// fill values at specific indices
alpha.front() = 'A';
alpha[1] = 'B';
alpha.at(2) = 'C';
alpha.back() = 'D';

// display values at specific indices
std::cout << alpha.front() << "\n";
std::cout << alpha[1] << "\n";
std::cout << alpha.at(2) << "\n";
std::cout << alpha.back() << "\n";

// output
A
B
C
D
Enter fullscreen mode Exit fullscreen mode

Member Functions

There are many functions on the class vector you can use:

  • v.capacity() returns the max number of elements that can be stored in the vector without having to reallocate more space
  • v.empty() returns true (1) if the vector is empty; false (0) if not
  • v.size() returns the size of the vector
  • v.max_size() returns the max number of elements that can be inserted into the vector
std::vector<char> alpha(4);

std::cout << alpha.empty() << "\n";
std::cout << alpha.capacity() << "\n";
std::cout << alpha.size() << "\n";
std::cout << alpha.max_size() << "\n";

// output
0
4
4
9223372036854775807
Enter fullscreen mode Exit fullscreen mode
  • v.clear() deletes all the elements from the vector
// initialize 4 elements to 'A'
std::vector<char> alpha(4, 'A');

std::cout << alpha.empty() << "\n";
alpha.clear();
std::cout << alpha.empty() << "\n";

// output
0
1
Enter fullscreen mode Exit fullscreen mode
  • v.push_back() pushes an element into the end of the vector
  • v.pop_back() removes the element at the end of the vector
// create empty vector
std::vector<char> alpha;

// push elements into vector
alpha.push_back('A');
alpha.push_back('B');
alpha.push_back('C');

alpha.pop_back(); // remove last element 'C'

// loop through elements of vector and display values
for (int i = 0; i < alpha.size(); i++)
  std::cout << i << ": " << alpha[i] << std::endl;

// output
0: A
1: B
Enter fullscreen mode Exit fullscreen mode

You can find more member functions here.

Disadvantage

Since vectors are dynamic they may take up more space than they need for the elements they contain, so that more elements can be added. When they need to be resized to fit more elements, memory has to be reallocated. Therefore, vectors consume more memory and there is some performance overhead compared to arrays.

Further Reading / References

Top comments (0)