heapuser
heapuser

Reputation: 331

Displaying contents of a vector container in C++

The following is a C++ program using STL vector container. Just wanted to know why the display() function is not printing the vector contents to the screen. If displaying the size() line is commented out, display() function works fine.

#include <iostream>
#include <vector>

using namespace std;

void display(vector<int> &v)
{
    for(int i; i<v.size(); i++)
    {
        cout << v[i] << " ";
    }
    cout << "\n" << endl;
}

int main()
{
    vector<int> v;
    cout << "Size of Vector=" << v.size() << endl;

    //Putting values into the vector
    int x;
    cout << "Enter five integer values" << endl;
    for(int i; i<5; i++)
    {
        cin >> x;
        v.push_back(x);
    }
    //Size after adding values
    cout << "Size of Vector=" << v.size() << endl;

    //Display the contents of vector
    display(v);

    v.push_back(6);

    //Size after adding values
    cout << "Size of Vector=" << v.size() << endl;

    //Display the contents of vector
    display(v);

}

Output:

Size of Vector=0

Enter five integer values

1

2

3

4

5

Size of Vector=5


Size of Vector=6

Upvotes: 12

Views: 63364

Answers (5)

Nahid Hasan
Nahid Hasan

Reputation: 11

If you use compiler versions g++ 11 or more than then you simply use:

#include <iostream>
#include <vector>

using namespace std;

int main(){
   vector<int> v;
   int x;
   cout << "Enter five integer values" << endl;
   for(int i=0; i<5; i++)
   {
        cin >> x;
        v.push_back(x);
   }

   for (auto i: v)
      cout<< i <<endl;

}

Upvotes: 1

Spandyie
Spandyie

Reputation: 945

I have found printing using for_each() very easy to understand and intuitive

#include<vector>
#include<algorithm>
using namespace std;

main(){
vector<int> foo_bar{1,2,3,4,5};
auto print_array = [](const auto& o) {cout << o << " "; };
for_each(foo_bar.begin(), foo_bar.end(), print_array);
}

Upvotes: 0

jjf
jjf

Reputation: 115

I think this is the easiest way to go:

#include <iostream>
#include <vector>

using namespace std;

int main(){
    vector<int> v;
    int x;
    cout << "Enter five integer values" << endl;
    for(int i=0; i<5; i++)
    {
        cin >> x;
        v.push_back(x);
    }

    for (int i = 0; i < (int)v.size(); i++)
        cout<< v.at(i) <<endl;

}

Upvotes: 2

111111
111111

Reputation: 16158

There is an idiomatic way for printing a vector out.

#include <algorithm>
#include <iterator>

//note the const
void display_vector(const vector<int> &v)
{
    std::copy(v.begin(), v.end(),
        std::ostream_iterator<int>(std::cout, " "));
}

This way is safe and doesn't require you to keep track of the vectors size or anything like that. It is also easily recognisable to other C++ developers.

This method works on other container types too that do not allow random access.

std::list<int> l;
//use l

std::copy(l.begin(), l.end(),
          std::ostream_iterator<int>(std::cout, " "));

This works both ways with input too consider the following:

#include <vector>
#include <iostream>
#include <iterator>
#include <algorithm>

int main()
{
    std::cout << "Enter int end with q" << std::endl;
    std::vector<int> v; //a deque is probably better TBH
    std::copy(std::istream_iterator<int>(std::cin),
              std::istream_iterator<int>(),
              std::back_inserter<int>(v));

    std::copy(v.begin(), v.end(),
              std::ostream_iterator<int>(std::cout, " "));
}

This version doesn't require any hard coding of size or manual management of the actual elements.

Upvotes: 27

YXD
YXD

Reputation: 32511

You are not initializing your variables. for(int i = 0; not for(int i;

Upvotes: 8

Related Questions