返回类型Vector

时间:2015-11-25 05:06:52

标签: c++ memory vector multiplication

我正在尝试编写一个带向量返回类型的程序。它一直在崩溃。我认为问题是编译器在向量创建期间没有为新向量初始化内存。但我不太清楚问题是什么。如果有人可以提供帮助,我们非常感激。 TY。

//Settings-->compiler-->(Have g++ follow the c++11 ISO c++ language standard [-std=c++11]

#include <iostream>
#include <vector>
#include <array>
#include <iomanip>

using namespace std;

void displayVector(vector<double> &);
vector<double> calcVolts(vector<double> &U, vector<double> &V);


int main()
{
vector<double> current {10.62, 14.89, 13.21, 16.55, 18.62, 9.47, 6.58, 18.32, 12.15, 3.98};
vector<double> resistance { 4.0, 8.5, 6.0, 7.35, 9.0, 15.3, 3.0, 5.4, 2.9, 4.8};
//displayVector(current);
//displayVector(resistance);
calcVolts (current, resistance);

}

void displayVector(vector<double> &object)
{
  for (int R = 0; R <object.size(); ++R)
    {
        cout<< setw(5)<< R+1<< "\t"<< object[R]<<endl;
    }
}

vector<double> calcVolts(vector<double> &U, vector<double> &V)
{
    std::vector <double> Voltage;
    if ((U.size() == V.size()) == false )
    {
        cout<<"Invalid Matrix Multiplication: Size do not match.\n\n";
    }
    else
    {
        for (int R = 0; R <U.size(); ++R)
        { 
        Voltage[R] = U[R]*V[R];
        }
        return Voltage;
     }
}

请参阅@Nandu和@soulsabr的评论

答案:

来自@Soulsabr: 初始化之前的向量也应该声明它的大小。

来自@Nandu: 局部变量没有返回类型。

来自@Soulsabr: {你当然可以归还它。在std :: vector的情况下,将制作一个副本,以便当本地文件超出范围时可以销毁本地文件。你绝对不能做的是返回一个指向本地对象的指针。}

2 个答案:

答案 0 :(得分:1)

for (int R = 0; R <U.size(); ++R)
{ 
    Voltage[R] = U[R]*V[R];
}

这是你的第一个问题。电压是一个空的向量,你试图把东西放在什么都不存在的地方。尝试创建像

这样的矢量
vector<double> voltage(U.size());

那应该有所帮助。另外,我很惊讶你不会因为你可能根本没有退货而得到错误。

答案 1 :(得分:0)

您不能将本地变量作为返回类型返回

vector<double> calcVolts(vector<double> &U, vector<double> &V)
{
    std::vector <double> **Voltage**;
    if ((U.size() == V.size()) == false )
    {
        cout<<"Invalid Matrix Multiplication: Size do not match.\n\n";
    }
    else
    {
        for (int R = 0; R <U.size(); ++R)
        { 
        Voltage[R] = U[R]*V[R];
        }
        return **Voltage**;
     }
}

传入向量以返回结果。

vector<double> UV;
calcVolts (current, resistance,UV);

 calcVolts(vector<double> &U, vector<double> &V, vector<double>& UV)
{
    if ((U.size() == V.size()) == false )
    {
        cout<<"Invalid Matrix Multiplication: Size do not match.\n\n";
    }
    else
    {
        for (int R = 0; R <U.size(); ++R)
        { 
        UV[R] = U[R]*V[R];
        }
     }
}