#include <vector>
#include <iostream>
using namespace std;
vector<int> fibonacci(int x, int y,vector<int> vi,int n){
vi[0]=x;
vi[1]=y;
for(int i=2;i<n;i++){
x=vi[i-2];
y=vi[i-1];
vi[i]=x+y;
cout<<vi[i]<<" "<<endl;
}
return vi;
}
void printv(string label, vector<int> vi, int n){
cout<<label<<" "<<endl;
for (int j=0; j<n; j++)
cout<<vi[j]<<" "<<endl;
}
/*void reverseV(vector<int> vi,int n)
{
vector<int> rv= vi;
for (int i=rv.size()-1; i>=0; i--) {
cout << rv[i] << endl;
}*/
//}
int main()
{
int x;
int y;
vector<int> vi;
vector<int> rv;
int n=100;
string label;
cout<<"enter the max number of times you want it to add"<<endl;
cin>>n;
cout<<"enter the first two fibonacci numbers"<<endl;
cin>>x>>y;
fibonacci(x,y,vi,n);
printv("vector: ",vi,n);
printv("vector: ",rv,n);
//vi.swap(rv);
}
答案 0 :(得分:4)
你甚至不应该传入一个向量,只需创建一个向量并返回:
std::vector<int> fibonacci(int x, int y, int n)
{
std::vector<int> vi(n);
vi[0] = x;
vi[1] = y;
//etc...
return vi;
}
然后,在main中,您只需捕获此返回值:
vi = fibonacci(x,y,n);
答案 1 :(得分:3)
您的程序包含多个错误,例如:
std::vector
已知道所包含元素的数量,如果传递矢量,则无需指定大小。
必须分配向量中的元素,您不能只使用v[i]=x
分配给它们,就像您可以做的那样在javascript中。您可以先向矢量指定大小,也可以使用push_back
添加元素。
显然你不知道传递值和参考值之间的区别。
但最大的错误是你试图通过实验来学习C ++,而且出于多种原因这是一种自杀式的方法。
通过阅读一本好书来学习C ++会更容易和更好。您可以找到列表here。
答案 2 :(得分:2)
对于直接问题,您错过了将函数的返回值分配回vi
。
rv = fibonacci(x,y,vi,n);
编辑:
还有一些其他问题,比如你从未在向量上实际分配过空间,并且你将值传递给函数并返回它。由于您似乎不想更改原件,只需使用本地vector
。
vector<int> fibonacci(int x, int y,int n){
vector<int> vi(n);
答案 3 :(得分:2)
您可以通过引用而不是按值传递矢量。要实现此目的,请将函数声明更改为
void fibonacci(int x, int y,vector<int>& vi,int n){ ...
这样您就可以在函数内部处理相同的矢量对象,而不仅仅是它的副本。因此,您对向量所做的每个更改都在函数外部可见。