返回类型向量

Posted

技术标签:

【中文标题】返回类型向量【英文标题】:return type Vector 【发布时间】:2015-11-25 05:06:52 【问题描述】:

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

//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 的情况下,将制作一个副本,以便在超出范围时可以销毁本地副本。你绝对不能做的是返回一个指向本地对象的指针。

【问题讨论】:

【参考方案1】:
for (int R = 0; R <U.size(); ++R)
 
    Voltage[R] = U[R]*V[R];

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

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

这应该会有所帮助。另外,我很惊讶您没有收到错误消息,因为您可能根本不会返回任何东西。

【讨论】:

非常感谢。初始化之前的向量也应该声明它的大小。 将此标记为正确答案将是一件好事。 有 2 个有用的建议可以创建正确的答案@soulsabr 如果你说的是南都,我会小心的。他/她的第一句话是绝对错误的。他的第二句话是养成习惯的好习惯。【参考方案2】:

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

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];
        
     

【讨论】:

非常感谢。局部变量没有返回类型。 您肯定可以退货。在 std::vector 的情况下,将制作一个副本,以便在超出范围时可以销毁本地副本。你绝对不能做的是返回一个指向本地对象的指针。

以上是关于返回类型向量的主要内容,如果未能解决你的问题,请参考以下文章

在 Cython 中包装返回复杂类型向量的函数

为啥我不能返回这个向量向量?

在 C++ 中使用成员函数向量时,有没有办法实现协变返回类型?

如何从返回向量的函数中获取向量值?

向量返回 const 引用,不可能向下转换

为啥可以从函数返回“向量”?