C++ 如何直接访问类的向量数据成员并将其打印出来?
我想直接访问vectorC++ 如何直接访问类的向量数据成员并将其打印出来?,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<
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;
}