矢量加法运算

时间:2010-09-04 14:37:04

标签: c++ linux vector g++

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

#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;
}

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

6 个答案:

答案 0 :(得分:8)

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

v3[i] = v1[i] + v2[i];

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

v3.push_back( v1[i] + v2[i] );

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

v3.resize( v1.size() );

如果你是push_back,最好还是预先分配空间:

v3.reserve( v1.size() );

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

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

答案 1 :(得分:8)

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

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

std::transform(v1.begin(), v1.end(), v2.begin(), std::back_inserter(v3), std::plus<float>());

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

答案 2 :(得分:4)

首先,您需要进行浮点除法

v1.push_back(i/10.0f);
v2.push_back(i/100.0f);

然后您需要为i上的v3个变量留出空间或使用push_back

v3.push_back(v1[i] + v2[i]);

答案 3 :(得分:1)

  

v3[i] = v1[i] + v2[i];

您正在分配不存在的元素。请改为v3.push_back(v1[i] + v2[i]);

此外,您可能需要i/10.0而非i/10,否则您的结果将被舍入。

答案 4 :(得分:1)

你写入v3向量,但你没有为它分配任何空间。

尝试添加:

 v3.reserve (v1.size());

在你的第一个和第二个循环之间。

答案 5 :(得分:1)

我认为问题是v3 [i]不起作用,因为向量开始具有零元素。你想做的是:

v3.push_back( v1[i] + v2[i] );

或预先分配载体

v3.resize( v1.size() );

或者最后的解决方案,我会做的是

v3.reserve( v1.size() );

for (i = 0; i < v1.size(); i++) {
    v3.push_back( v1[i] + v2[i] );
}

因为这样可以避免一次又一次地调整矢量大小。