矢量加法运算

Arp*_*pit 1 c++ linux g++ vector

我想在下面添加两个向量是代码片段: -

#include <iostream>
#include <vector>
using namespace std;

int main()
{
        unsigned int i = 0;
        vector <float> v1;
        vector <float> v2;
        vector <float> v3;



        cout << "Filling the Numbers\n";
        for (i=5;i < 125 ; i = i + 5) {
            v1.push_back(i/10);
            v2.push_back(i/100);
        }

        cout << "Adding the numbers\n";
        for (i = 0; i < v1.size(); i++) {
                v3[i] = v1[i] + v2[i];
        }

        cout << "Printing the numbers\n";
                for (i = 0; i < v3.size() ; i++) {
                        cout << v3[i];
                }


        return 0;
}
Run Code Online (Sandbox Code Playgroud)

该程序在第18行崩溃.在我看来,我需要为+操作执行运算符重载.请帮忙.

gre*_*ade 9

为了避免遇到明显的陷阱,您可以选择这样做:

#include <algorithm> // for transform
#include <functional> // for plus

std::transform(v1.begin(), v1.end(), v2.begin(), std::back_inserter(v3), std::plus<float>());
Run Code Online (Sandbox Code Playgroud)

参考:https://en.cppreference.com/w/cpp/algorithm/transform


Kor*_*icz 8

这行不起作用,因为没有v3[i]分配:

v3[i] = v1[i] + v2[i];
Run Code Online (Sandbox Code Playgroud)

你有两个选择,要么使用'push_back'

v3.push_back( v1[i] + v2[i] );
Run Code Online (Sandbox Code Playgroud)

或者手动将数组调整为给定大小:

v3.resize( v1.size() );
Run Code Online (Sandbox Code Playgroud)

如果你是push_back,那么无论如何都要预先分配空间:

v3.reserve( v1.size() );
Run Code Online (Sandbox Code Playgroud)

最后,您可以尝试阅读std::valarray,因为这些操作已经内置于其中!

编辑:是的,正如Johannes所说,你有浮点除法的问题:>


Joh*_*itb 5

首先你需要进行浮点除法

v1.push_back(i/10.0f);
v2.push_back(i/100.0f);
Run Code Online (Sandbox Code Playgroud)

然后你需要有i变量的空间v3或使用push_back

v3.push_back(v1[i] + v2[i]);
Run Code Online (Sandbox Code Playgroud)