以下是使用STL矢量容器的C ++程序。只是想知道为什么display()函数没有将矢量内容打印到屏幕上。如果显示size()行被注释掉,则display()函数可以正常工作。
#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);
}
输出:
Size of Vector=0
Enter five integer values
1
2
3
4
5
Size of Vector=5
Size of Vector=6
答案 0 :(得分:25)
有一种用于打印矢量的惯用方法。
#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, " "));
}
这种方式是安全的,不需要您跟踪矢量大小或类似的东西。其他C ++开发人员也很容易识别它。
此方法也适用于其他容器类型,不允许随机访问。
std::list<int> l;
//use l
std::copy(l.begin(), l.end(),
std::ostream_iterator<int>(std::cout, " "));
这与输入的两种方式同样考虑以下因素:
#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, " "));
}
此版本不需要任何硬编码或实际元素的手动管理。
答案 1 :(得分:8)
您没有初始化变量。 for(int i = 0;
不是for(int i;
答案 2 :(得分:2)
我认为这是最简单的方法:
#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;
}
答案 3 :(得分:0)
我发现使用for_each()进行打印非常容易理解和直观
#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);
}
答案 4 :(得分:0)
如果您使用的是g ++ 11或更高版本的编译器,则只需使用:
#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;
}