How Do I Add Elements to an Empty Vector in a Loop?

I am trying to create an empty vector inside a loop, and want to add an element to the vector each time something is read in to that loop.

#include <iostream>
#include <vector>

using namespace std;

int main()
{
   std::vector<float> myVector();

   float x;
   while(cin >> x)
      myVector.insert(x);

   return 0;
}

But this is giving me error messages.

3

5 Answers

You need to use std::vector::push_back() instead:

while(cin >> x)
  myVector.push_back(x);
//         ^^^^^^^^^

and not std::vector::insert(), which, as you can see in the link, needs an iterator to indicate the position where you want to insert the element.

Also, as what @Joel has commented, you should remove the parentheses in your vector variable's definition.

std::vector<float> myVector;

and not

std::vector<float> myVector();

By doing the latter, you run into C++'s Most Vexing Parse problem.

1

Use push_back:

while(cin >> x)
  myVector.push_back(x);

The insert function takes an iterator as the first argument, indicating the position to insert.

Also, you need to get rid of the parentheses in the declaration of myVector:

std::vector<float> myVector;
2

If you want to use myVector.insert(), use it like myVector.insert(myVector.end(), x). This will append x at the end of myVector. You can insert x in the beginning by myVector.insert(myVector.begin(), x).

Another option is to use std::vector::emplace_back() instead of std::vector::push_back(). The makes some optimizations and doesn't take an argument of type vector::value_type, it takes variadic arguments that are forwarded to the constructor of the appended item, while push_back can make unnecessary copies or movements.

This is demonstrated in the std::vector::emplace_back documentation and here is a related question.

Usage example:

std::vector<int> myVector;

while (cin >> x) {
    myVector.emplace_back(x);
}

The code below may answer your question and also brings some other examples regarding how to insert new elements in different position or index.

#include <iostream>
#include <vector>

using namespace std;

int main()
{
    vector<int> vector_of_integers{};

    vector_of_integers.push_back(1); // O(1)
    vector_of_integers.push_back(3); // O(1)
    vector_of_integers.push_back(5); // O(1)
    vector_of_integers.push_back(7); // O(1)

    for (int i = 8; i <= 10; i++)
        vector_of_integers.push_back(i);

    // Printing out all the elements of vector of integers - Method 1
    copy(vector_of_integers.begin(), vector_of_integers.end(), ostream_iterator<int>(cout, " ")); // 1 3 5 7 8 9 10
    cout << endl << endl;

    // Inserting '2' at index 1
    vector<int>::iterator it{ vector_of_integers.begin() };
    advance(it, 1);
    vector_of_integers.insert(it, 2); // O(N+M) => M is size of elements to be inserted

    // Printing out all the elements of vector of integers - Method 2
    for (auto const& element : vector_of_integers)
        std::cout << element << " "; // 1 2 3 5 7 8 9 10
    cout << endl << endl;

    // "it" no longer valid, get a new one
    it = vector_of_integers.begin();
    vector_of_integers.insert(it + 4, 6); // O(N+M) => M is size of elements to be inserted

    // Printing out all the elements of vector of integers - Method 3
    for (it = vector_of_integers.begin(); it != vector_of_integers.end(); it++)
        std::cout << *it << ' '; // 1 2 3 5 6 7 8 9 10
    cout << endl << endl;

    // insert '4' 7 times at index 3
    vector<int> new_vector_to_be_inserted(7, 4);
    vector_of_integers.insert(vector_of_integers.begin() + 3, new_vector_to_be_inserted.begin(), new_vector_to_be_inserted.end()); // O(N+M) => M is size of elements to be inserted

    // Printing out all the elements of vector of integers - Method 4
    for (int i = 0; i < vector_of_integers.size(); i++)
        cout << vector_of_integers.at(i) << ' '; // 1 2 3 4 4 4 4 4 4 4 5 6 7 8 9 10
    cout << endl << endl;

    return 0;
}

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Chloe Bennett

Chloe Bennett

Culture, Media & Entertainment Columnist

Chloe Bennett explores the intersection of pop culture, streaming entertainment, digital trends, and contemporary lifestyle. Her weekly commentary reaches thousands of culture enthusiasts.

Share this article
Twitter Facebook Pinterest