返回类型向量
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 的情况下,将制作一个副本,以便在超出范围时可以销毁本地副本。你绝对不能做的是返回一个指向本地对象的指针。以上是关于返回类型向量的主要内容,如果未能解决你的问题,请参考以下文章