从向量C ++中的元素中减去值

时间:2014-01-21 18:57:20

标签: c++ vector

我有两个值为

的向量
2.123, 2.111, 9.222
1.22, 4.33, 2.113

我想相互减去每个Vector的第一个元素,每个Vector的第二个元素和第三个元素。所以

abs(2.123-1.22)
abs(2.111-4.33)
abs(9.222-2.113)

我很确定你必须创建一个for循环,但我不知道如何处理这个问题,因为我是C ++的新手。谢谢大家的帮助。

以下代码是我所拥有的一般概念

std::vector<double> data1, vector<double> data2, vector<double> result;
std::cout << "Enter in data#1 ";
std::cin >> data1;

std::cout << "Enter in data#2 ";
std::cin >> data2;

for (int i=0;i<data1.size();i++){
    //start subtracting the values from each other and have them stored in another Vector

3 个答案:

答案 0 :(得分:12)

假设它们的大小相同:

std::vector<double> a;
std::vector<double> b;
// fill in a and b
std::vector<double> result;
std::transform(a.begin(), a.end(), b.begin(), std::back_inserter(result), [&](double l, double r)
{
    return std::abs(l - r);
});

答案 1 :(得分:9)

您可能(至少通常)希望使用std::transform

执行此操作
std::vector<double> a{2.123, 2.111, 9.222}, 
                    b{1.22, 4.33, 2.133}, 
                    c;

std::transform(a.begin(), a.end(), b.begin(), std::back_inserter(c),
    [](double a, double b) { return fabs(a-b); });

答案 2 :(得分:-4)

如果您还不知道算法std::transform中建议的标准算法,您可以使用普通的for语句编写等效代码。例如

std::vector<double> a { 2.123, 2.111, 9.222 };
std::vector<double> b { 1.22, 4.33, 2.133 }; 
std::vector<double> c( a.size(), 0.0 );


for ( std::vector<double>::size_type i = 0; i < a.size(); i++ )
{
   c[i] = std::abs( a[i] - b[i] );
}