返回类型Vector

return type Vector

本文关键字:Vector 返回类型      更新时间:2023-10-16

我正在尝试编写一个具有向量返回类型的程序。它一直在崩溃。我认为问题是编译器在创建向量的过程中没有初始化新向量的内存。但我不太确定问题出在哪里。如果有人能帮忙,我将不胜感激。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.nn";
    }
    else
    {
        for (int R = 0; R <U.size(); ++R)
        { 
        Voltage[R] = U[R]*V[R];
        }
        return Voltage;
     }
}

查看@南都和@soulsabr 的评论

答案:

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

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

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

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

这是你的第一期。电压是一个空向量,你试图把一些东西放在什么都不存在的地方。尝试创建类似的矢量

vector<double> voltage(U.size());

这应该会有所帮助。此外,我很惊讶你没有得到一个错误,因为你可能根本没有返回任何东西。

不能将局部变量作为返回类型返回

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.nn";
    }
    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.nn";
    }
    else
    {
        for (int R = 0; R <U.size(); ++R)
        { 
        UV[R] = U[R]*V[R];
        }
     }
}