【问题标题】:Print values of vector [duplicate]打印向量的值[重复]
【发布时间】:2018-01-24 15:43:43
【问题描述】:

我正在使用 push_back() 函数插入这些元素,我想知道

如何打印向量c的内容?

vector<int> c[2];
c[0].push_back(0);
c[0].push_back(1);
c[1].push_back(2);
c[0].push_back(3);

我试过for(int i = 0; i &lt; n; i++) cout &lt;&lt; c[i] &lt;&lt; endl;

但它给了我这个错误

error: no match for 'operator<<' in 'std::cout << c[i]'|

【问题讨论】:

  • 是时候学习向量了cplusplus.com/reference/vector/vector
  • c[i] 是一个std::vector,正如编译器所述,没有operator&lt;&lt; 的重载以std::vector 作为参数。
  • 根据n 的大小,您还会调用未定义的行为。 (如果它会编译)。
  • 至于如何解决您的问题,如果您有一个普通的std::vector&lt;int&gt; 对象(变量),您知道如何从中打印元素吗?那你为什么不在你展示的循环中使用它呢?
  • vector&lt;int&gt; c[2]; -- 你声明了一个vector&lt;int&gt; 的数组。这真的是你想要的吗?

标签: c++ vector


【解决方案1】:
  for (const auto & vec : c) {
        for (const auto elem : vec)
            std::cout << elem << ' ';
        std::cout << '\n';
    }

至少需要 C++11。

此外,您还可以:

constexpr size_t vecLen = 2;
std::vector<int> c[vecLen];
c[0].push_back(0);
c[0].push_back(1);
c[1].push_back(2);
c[0].push_back(3);

for (size_t vecIndex = 0; vecIndex < vecLen; ++vecIndex) {
    for (size_t itemIndex = 0; itemIndex < c[vecIndex].size(); ++itemIndex)
        std::cout << c[vecIndex][itemIndex] << ' ';
    std::cout << '\n';
}

但我不会推荐它。

【讨论】:

    【解决方案2】:

    每当您看到用于打印内容的以下标志&lt;&lt; 时,它都会起作用,因为它已超载;但是vector&lt;&gt; 没有重载函数可以让您执行此操作。你可以做的是:

    1- 有一个iterarot 类允许您在容器中进行迭代,例如vector:

    vector<int>::iterator it;
    
    cout << "myvector contains:";
    for ( it=myvector.begin() ; it < myvector.end(); it++ )
        cout << " " << *it;
    
    cout << endl;
    

    2- 如果您正在编写类,请编写一个重载函数,如下所示:

    iterate:

    std::vector<int>::const_iterator iter= vec.begin();
    for(iter; iter != vec.end(); ++iter)
      {
         cout<<*iter; //This is what step 2 provides for
      }
    

    重载函数:

    ostream& operator<<( ostream& os, const vector<int>&)
      {
    
      }
    

    这里是如何使用向量和迭代器:

        cout << "vector from initializer list: " << endl;
        vector<int> vi1 = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
    
        cout << "size: " << vi1.size() << endl;
        cout << "front: " << vi1.front() << endl;
        cout << "back: " << vi1.back() << endl;
    
        // iterator
        vector<int>::iterator itbegin = vi1.begin();
        vector<int>::iterator itend = vi1.end();
        for (auto it = itbegin; it < itend; ++it) {
            cout << *it << ' ';
        }
        cout << endl;
    
        cout << "element at 5: " << vi1[5] << endl;
        cout << "element at 5: " << vi1.at(5) << endl;
    
        cout << "range-based for loop:" << endl;
        for (int & i : vi1) {
            cout << i << ' ';
        }
        cout << endl;
    

    【讨论】:

    • 它给了我这个错误:error: request for member 'begin' in 'c', which is non-class type 'std::vector [2]'|
    • 查看我编辑并添加了完整示例的帖子
    猜你喜欢
    • 2017-01-14
    • 2021-12-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多