C++ 如何直接访问类的向量数据成员并将其打印出来?

C++ 如何直接访问类的向量数据成员并将其打印出来?,c++,c++11,vector,C++,C++11,Vector,我想直接访问vectorBigArray::v,它是类成员,并将其打印出来。但编译器不会生成我的代码: #include <iostream> #include <vector> using namespace std; class BigArray { private: vector<int> v={1,2,3,4,5,6,7,8,9,10}; int accessCounter; public: const vector<

我想直接访问vector
BigArray::v
,它是类成员,并将其打印出来。但编译器不会生成我的代码:

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

class BigArray
{
private:

    vector<int> v={1,2,3,4,5,6,7,8,9,10};
    int accessCounter;
public:
    const vector<int> & getVector() const {return v;}
};


int main(int argc, const char * argv[]) {
    // insert code here...
    BigArray b;
    cout<< *b.getVector()<< endl;
    return 0;
}
#包括
#包括
使用名称空间std;
类BigArray
{
私人:
向量v={1,2,3,4,5,6,7,8,9,10};
int访问计数器;
公众:
常量向量&getVector()常量{return v;}
};
int main(int argc,const char*argv[]{
//在这里插入代码。。。
大数组b;
cout有两个问题:

  • b.getVector()
    返回对向量的引用,因此通过使用
    *b.getVector()
    尝试取消引用,这是无效的。您可能只是想使用
    b.getVector()
    而不是
    *b.getVector()

  • 将向量流式传输到
    std::ostream
    中不会出现重载,就像
    std::cout
    一样。您必须自己编写,例如:

  • #包括
    #包括
    使用名称空间std;
    类BigArray{
    私有:/*字段:*/
    向量v={1,2,3,4,5,6,7,8,9,10};
    int访问计数器;
    公共:/*方法:*/
    常量向量&getVector()常量{return v;}
    };
    模板
    
    std::ostream&operator听起来就像你可以使用一个函数,你试图去引用一个
    向量
    ,然后打印它。你应该从中看到,你不能简单地使用
    cout
    和向量来“打印向量”。所以在将类引入混合之前,先解决这个简单的问题。如果编译器“不构建代码”它告诉您原因-您应该仔细阅读,因为它有助于找到解决方案您的循环从不将
    首先设置为false,因此
    “,”
    不会在项目之间输出。您需要首先将
    赋值移出
    if
    块,或者至少移动到
    else
    块中。或者,您可以使用
    std::copy()
    std::ostream_迭代器
    而不是使用手动循环。让
    std::ostream_迭代器
    为您处理项目定界,例如:
    template std::ostream&operator@RemyLebeau更正了对
    的第一次处理
    std::copy
    /
    std::ostream\u迭代器
    thingie是一个alternative(甚至是更好的选择)。但是,您认为OP在这一点上最能理解哪一个?
    #include <iostream>
    #include <vector>
    using namespace std;
    
    class BigArray {
    private: /* Fields: */
        vector<int> v={1,2,3,4,5,6,7,8,9,10};
        int accessCounter;
    public: /* Methods: */
        const vector<int> & getVector() const {return v;}
    };
    
    template <typename T>
    std::ostream & operator<<(std::ostream & os, std::vector<T> const & v) {
         bool first = true;
         os << '{';
         for (auto const & elem : v) {
             if (!first) {
                 os << ", ";
             } else {
                 first = false;
             }
             os << elem;
         }
         return os << '}';
    }
    
    int main(int argc, const char * argv[]) {
        // insert code here...
        BigArray b;
        cout<< b.getVector() << endl;
        return 0;
    }