在C ++中显示向量容器的内容

时间:2012-03-17 17:04:40

标签: c++ stl vector

以下是使用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

5 个答案:

答案 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;

}