当前位置: 首页 > 知识库问答 >
问题:

C矢量加法补偿误差:

岳奇逸
2023-03-14

所以我有这个代码:

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

这是我在最后一行得到的补偿错误:

[错误]不匹配运算符

那是为什么呢?

共有3个答案

许丁雷
2023-03-14

为什么不在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。然后在主函数中,可以这样调用函数。

vector<int> sumat;
suma(a, b, sumat);

然后,您可以继续打印sumat向量的输出,如下所示:

for(size_t i = 0; i < sumat.size(); ++i)
{
    cout << sumat[i] << endl;
}
东郭骁
2023-03-14

您应该将代码更改为:

 #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[i]时,你应该保留vectorsumat的功能<代码>向量

(2)你不能直接cout一个向量对象,你可以为向量对象写一个覆盖运算符,或者输出向量元素

仇建茗
2023-03-14

C不定义ostream运算符

您可以定义自己的

全局运算符重载方法有一个特定的调用约定,第一个参数是对运算符左侧对象的引用(例如cout中的cout

例如。:

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\u back。目前它将崩溃。

 类似资料:
  • 我想要的 我在寻找在Activiti上下文达到等待状态之前回滚它的方法。例如,我有: 真是个问题: 我不想手动删除执行变量。我已经试过普通交易-没有结果。现在我想到了补偿事件。 问题: 补偿事件是回滚Activiti上下文还是应该在适当的CompensationserviceTask中手动执行?

  • 在上一章,我们介绍了 Meteor 的一个新概念:内置方法。 Meteor 的内置方法是一种在服务器上执行一系列命令的结构化方法。在示例中,我们使用内置方法是为了确保新帖子是通过作者的姓名和 ID ,以及当前服务器时间去标记。 然而,如果 Meteor 用最基本的方式去执行内置方法,我们会注意到一些问题。想一想下面事件的序列(注:为演示方便,时间戳值是随机的生成的): +0ms: 用户单击提交按钮

  • 给定一个9自由度的加速度计(加速度计、陀螺仪和磁强计),我想消除/补偿加速度计读数中重力的影响(加速度计可以自由旋转)。传感器以四元数表示方式给出相对于(磁)北、西和上参考坐标系的方向。 我找到这个了http://www.varesano.net/blog/fabio/simple-gravity-compensation-9-dom-imus但无法理解给定方程的基础。 我怎样才能实现上述信息?

  • 在瞬时失效之后做一个尝试它常常有助于在再试一次之前等待一会。因为通常失败是有一些问题引起的它只能通过等待来解决这些问题,如果RetryCallback失败,RetryTemplate可以暂停执行取决于BackoffPolicy在适当的位置 public interface BackoffPolicy { BackOffContext start(RetryContext context);

  • 矢量或者说向量,可以通过2~4个分量表示一个向量,比如通过vec3(1,0,0)表示三维空间中一个沿着x轴正方向的三维方向向量,如果你有高中数学的基础,应该对向量有一定的了解,对于三维坐标的相关几何运算也有一定的概念。 关键字 数据类型 vec2 二维向量,具有xy两个分量,分量是浮点数 vec3 三维向量 ,具有xyz三个分量,分量是浮点数 vec4 四维向量 ,具有xyzw四个分量,分量是浮点

  • Vector是由连续整数索引的值的集合。 使用Clojure中的矢量方法创建矢量。 例子 (Example) 以下是在Clojure中创建矢量的示例。 (ns clojure.examples.example (:require [clojure.set :as set]) (:gen-class)) (defn example [] (println (vector 1 2 3