所以我的代码是:
#include <iostream>
#include <vector>
using namespace std;
vector <int> suma(vector <int> t, vector <int> m){
int i;
vector <int> sumat;
for(i=0; i<t.size();i++){
sumat[i]=t[i]+m[i];
}
return sumat;
}
int main(){
vector <int> a(4,0);
a[0]=5;
a[1]=5;
a[2]=3;
a[3]=0;
vector <int> b(4,0);
b[0]=5;
b[1]=5;
b[2]=3;
b[3]=0;
cout<< suma(a,b) <<endl;
}
这是我在最后一个cout行中得到的补偿错误:
[错误]不匹配&#39;运营商&lt;&lt;&lt;&#39; (操作数类型是&#39; std :: ostream {aka std :: basic_ostream}&#39;和&#39; std :: vector&#39;)
为什么?
答案 0 :(得分:2)
C ++没有为向量定义ostream operator <<
,很可能是因为有很多不同的方法可以输出它们。每行一个条目,如下所示,或以逗号分隔,或包含在括号内。
您可以使用&#34;运算符重载&#34;为向量定义自己的<<
运算符。这允许同一运算符根据调用参数调用不同的代码。
全局运算符重载方法具有特定的调用约定,第一个参数是对运算符左侧对象的引用(例如cout
中的cout << v
,第二个参数是值操作符的权限(v
)。对于<<
运算符,通常将参数定义为const引用,因为在输出时通常不会更改该值。 / p>
<<
运算符的返回值通常是第一个参数。这样,您就可以将<<
的来电链接到cout << vec << "Done" << std::endl
。
e.g:
ostream &operator << (ostream &out, const vector<int> &vec)
{
for (auto &&val : vec)
out << val << std::endl;
return out;
}
如果你不能使用c ++ 11,你可以像这样使用旧的样式循环:
ostream &operator << (ostream &out, const vector<int> &vec)
{
for (vector<int>::size_type i = 0; i < vec.size(); i++)
out << vec[i] << std::endl;
return out;
}
或使用迭代器的其他类似循环。
PS。不相关的注释 - 您需要在代码中初始化sumat
的大小,或使用push_back
。目前它会崩溃。
答案 1 :(得分:0)
为什么不在suma函数中打印sumat的内容,如
void suma(vector <int>& t, vector <int>& m, vector<int>& output){
// Assuming that both vectors t and m are of the same size.
for(size_t i=0;i<t.size();i++){
output.push_back([i]+m[i]);
}
}
请注意,我将函数的返回值从vector更改为void。 然后在你的main函数中你可以像这样调用函数。
vector<int> sumat;
suma(a, b, sumat);
然后您可以继续打印sumat矢量的输出,如下所示:
for(size_t i = 0; i < sumat.size(); ++i)
{
cout << sumat[i] << endl;
}
答案 2 :(得分:0)
您应该将代码更改为:
#include <iostream>
#include <vector>
using namespace std;
vector<int> suma(vector<int> t, vector<int> m){
int i;
vector<int> sumat(4);
for(i=0; i<t.size();i++){
sumat[i]=t[i]+m[i];
}
return sumat;
}
int main(){
vector<int> a(4,0);
a[0]=5;
a[1]=5;
a[2]=3;
a[3]=0;
vector<int> b(4,0);
b[0]=5;
b[1]=5;
b[2]=3;
b[3]=0;
vector<int> res = suma(a,b);
for(size_t i = 0; i<res.size(); i++)
cout<<res[i]<<endl;
}
您的代码中存在一些错误:
(1)当您使用sumat
时,您应该保留向量sumat[i]
的权限。 vector<int> sumat
只是对矢量进行判定,如果您想要将值插入sumat
,则可以使用push_back
。
(2)您可以直接cout
vector
个vector
对象,可以为vector
对象编写覆盖运算符或输出{{1}}的元素。
答案 3 :(得分:-1)
没有关于如何向输出流发射矢量的定义。
您应该定义一个函数将int的向量转换为字符串,然后调用
cout<< YourPrintFunction(suma(a,b)) <<endl;