Reputation: 331
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
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
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
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
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
Reputation: 32511
You are not initializing your variables. for(int i = 0;
not for(int i;
Upvotes: 8