我有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循环,但是它是从每个元素中减去每个数字,而不是仅是第一个。
您没有以正确的方式进行操作。您一直在使用cascaded
for循环,因此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] 删除。
我来说两句