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

C++ 从向量C+中的元素中减去值+;,c++,vector,C++,Vector,我有两个向量的值 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&g

我有两个向量的值

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
std::向量数据1、向量数据2、向量结果;
std::cout>data1;
std::cout>data2;

对于(int i=0;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::向量a;
std::载体b;
//填写a和b
std::向量结果;
std::transform(a.begin(),a.end(),b.begin(),std::back_插入器(结果),[&](双l,双r)
{
返回标准::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); });
std::向量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),
[](双a,双b){返回晶圆厂(a-b);};

如果您还不知道此处建议的标准算法,则可以使用普通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::向量a{2.123,2.111,9.222};
std::载体b{1.22,4.33,2.133};
std::向量c(a.size(),0.0);
对于(std::vector::size_type i=0;i
您应该首先弄清楚如何将数据输入向量。
std::cin>>data1;
不起作用。如果我想“就地”进行减法(如a
-=
):
std::transform(a.begin()、a.end()、b.begin()、a.begin()、std::减法()),可以使用transform吗
?我尝试了它并得到了预期的结果,但我不确定它是否总是有效。@tobi303:是的,标准明确允许结果迭代器等于
a.begin()
b.begin()
。最好在std::transform之前保留结果。最好在std::之前保留结果:transform@HumamHelfawi如果性能是一个问题,可以。但是,在使用
std::back\u inserter
时,不需要这样做。