вычитание значений из элементов вектора C++
у меня есть два вектора со значениями
2.123, 2.111, 9.222
1.22, 4.33, 2.113
Я хочу, чтобы вычесть первый элемент каждого вектора друг с другом, второй элемент каждого вектора, и третий. так что
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 ответов
Если вы еще не знаете стандартных алгоритмов, как предлагается здесь алгоритм 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] );
}
предполагая, что они оба одинакового размера:
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);
});
вы, вероятно, (по крайней мере обычно) хотите сделать это с помощью 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); });