我在互联网上搜索了很多,并且找到了打印矢量数据的简单例子。
我试图像数组一样打印它,虽然它没有用......
这是我试过的:
using namespace std ;
.....
const int MAX = 255 ;
vector <string> testersName[MAX];
cout << testersName[i] << endl;
错误只发生在cout行,第一行得到了遵守,一切顺利......
我在testersName中有数据,但我收到了这个错误:
“错误1错误C2679:二进制'&lt;&lt;' :找不到哪个运算符采用'std :: vector&lt; _Ty&gt;'类型的右手操作数(或者没有可接受的转换)“
答案 0 :(得分:5)
vector <string> testersName[MAX];
声明了一个向量数组,只需vector <string> testersName(MAX);
- 这就声明了一个带有MAX
元素的向量。
答案 1 :(得分:1)
你必须迭代对矢量的元素进行处理,然后对每个元素进行处理:
vector <string> testersName;
// Fill your vector
for (int i = 0; i < testersName.size(); ++i) {
cout << testersName[i] << endl;
}
此外,我不认为第vector <string> testersName[MAX];
行符合你的想法。没有必要给矢量赋予大小,因为它在填充时会动态增长。如果您仍想提供大小,请使用括号:(MAX)
答案 2 :(得分:0)
我发现打印矢量的最佳方法是使用某种包装器:
让我们开始:
template< typename T >
class ConstVecFormat
{
private:
std::vector<T> const& vec_;
const std::string prefix_, delim_, suffix_;
public:
explicit ConstVecFormat( std::vector<T> const& vec, prefix="", delim=",", suffix="" ) :
vec_(vec), prefix_(prefix), delim_(delim), suffix_(suffix_)
{
}
std::ostream& print( std::ostream& os ) const
{
typename std::vector<T>::const_iterator iter = vec_.begin(), end=vec_.end();
os << prefix_;
if( iter != end )
os << *iter;
else
while( ++iter != end )
{
os << delim_ << *iter;
}
os << suffix_;
return os;
}
};
template< typename T >
std::ostream & operator<<( std::ostream & os, ConstVecFormat<T> const& format )
{
return format.print( os );
}
这是前一个主题的重复,我们在这个主题中大量增强了这个模板,以便为打印集合生成一个更通用的模板。