C ++向量加法comp错误:

时间:2014-11-06 23:26:45

标签: c++ vector addition

所以我的代码是:

#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;)

为什么?

4 个答案:

答案 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 vectorvector对象,可以为vector对象编写覆盖运算符或输出{{1}}的元素。

答案 3 :(得分:-1)

没有关于如何向输出流发射矢量的定义。

您应该定义一个函数将int的向量转换为字符串,然后调用

cout<< YourPrintFunction(suma(a,b)) <<endl;