如何从另一个向量的另一个第一个元素减去向量中的第一个元素?

拥抱

我有2个整数的向量。

说第一个有(2,1)。第二个(1,1)。

我试图减去这样的数字:

2-1、1-1

那么我需要将这两个数字相加,所以最终答案将是1。

我已经尝试过for循环,但是它是从每个元素中减去每个数字,而不是仅是第一个。

到目前为止,这是我尝试过的。

vector<int> temp;

for(unsigned i =0; i < Vec1.size(); i++)
 for(unsigned o =0; o < Vec2.size(); o++)
   temp.push_back(Vec1.at(i).nums- Vec2.at(o).nums);

//where nums, are just the numbers showed above

您所期望的输出是:1

1个

0

0

我需要它是:

1个

0

然后我可以做一个for循环将所有int加在一起。

任何帮助将不胜感激!

阿比奥罗拉

我已经尝试过for循环,但是它是从每个元素中减去每个数字,而不是仅是第一个。

您没有以正确的方式进行操作。您一直在使用cascadedfor循环,因此vector要从second的每个元素中减去first的每个元素vector

有两种方法可以正确实施:

一种是编写自己的函数以减去两个vector,然后将结果的元素相加。

#include <iostream>
#include <vector>


std::vector<int> subtract(const std::vector<int>& a, const std::vector<int>& b)
{
    std::vector<int> result;
    const int SIZE = std::min(a.size(), b.size());

    for (int i = 0; i < SIZE; i++)
        result.push_back(a[i] - b[i]);

    return result;
}


int addAllElements(const std::vector<int>& a)
{
    int result = 0;
    for (auto i: a)
        result += i;
    return result;
}


int main(void)
{
    std::vector<int> a = {2, 1};
    std::vector<int> b = {1, 1};

    std::cout << "Result is " << addAllElements(subtract(a, b)) << std::endl;

    return 0;
}

另一种方法(首选)涉及使用STL

#include <iostream>

#include <vector>
#include <algorithm>
#include <numeric>

int main(void) 
{
    std::vector<int> a = { 2, 1 };
    std::vector<int> b = { 1, 1 };

    std::vector<int> result;
    std::transform(std::begin(a), std::end(a), std::begin(b), std::back_inserter(result), [](const auto a, const auto b) 
        {
            return a - b;
        } 
    );

    int sumAllElements = std::accumulate(result.begin(), result.end(), 0);
    std::cout << "Result is " << sumAllElements << std::endl;

    return 0;
}

上面的代码使用lambda expression要了解有关它们的更多信息,请参阅此链接

std::accumulate对的所有元素求和,container然后std::transform对两个向量执行转换(在第五个参数中指定),然后将结果放入另一个向量中。我们曾经lambda expression执行所需的sub操作。

编辑:

不使用lambda它也很容易。您可以使用function pointers

#include <iostream>

#include <vector>
#include <algorithm>
#include <numeric>

double subtract(const double a, const double b)
{
    return a - b;
}

int main(void) 
{
    std::vector<int> a = { 2, 1 };
    std::vector<int> b = { 1, 1 };

    std::vector<int> result;
    std::transform(std::begin(a), std::end(a), std::begin(b), std::back_inserter(result), subtract);

    int sumAllElements = std::accumulate(result.begin(), result.end(), 0);
    std::cout << "Result is " << sumAllElements << std::endl;

    return 0;
}

使用lambda表达式具有各种优点。

注意:

您也可以使用std::minus而不是定义自己的函数。像这样:

std::transform(std::begin(a), std::end(a), std::begin(b), std::back_inserter(result), std::minus<int>());

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何从一个向量中删除min元素并添加到另一个向量,而第一个变为空?

选择另一个元素之后的第一个出现的元素

如何将对向量中的对的第一个元素(字符串)与另一个字符串进行比较?

查找另一个向量中第一个大于或等于向量的值的索引

将列表的第一个元素与另一个列表进行比较

如何将一个向量添加到另一个拥有第一个向量常量的向量?

如何访问另一个 JSON 对象数组中的 JSON 对象数组的第一个元素?

在向量中查找第一个缺少的元素

如何从R中的另一个向量中减去一个向量

将一个列表中的 8 个元素拆分为另一个 C# 的第一个元素

如何提取 JsonArray 的第一个元素是整数,另一个是 JsonElements?

删除另一个数组内的数组中的第一个元素

R:如何选择列表中一个向量的第一个元素

如何复制向量的第一个和最后一个元素?

向量对的第一个元素的范围

根据另一个向量中的元素过滤/复制一个向量

推力访问向量元素的另一个向量

向量元素是另一个向量Matlab的索引

选择放置在另一个元素之后但不立即放置的第一个元素

如何根据第一个api数据执行另一个api

PHP Show“ You”在另一个用户的最爱中的第一个

选择另一个div中的第一个div

查找一个元素是否被仅第一个元素的id的另一个元素覆盖

从包含字符串的第一个元素到包含另一个元素的最后一个元素获取数组的切片

使用ngFor项目在第一个元素之前显示另一个项目

另一个 PostgreSQL 中一个表 id 中的第一个记录日期

如何从另一个相同的向量中替换一个元素,但另一个向量不会改变?

如何创建一个向量来指示一个向量的元素与另一个向量中的任何元素之间的匹配?

1 个 div 内有 2 个元素,我希望另一个元素与第一个元素一起缩放