这是一个菜鸟问题,对不起,我刚开始在c ++中使用向量。这是我正在努力的代码。
int main()
{
//some code
int n;
cin>>n;
vector <int> a(n+1,0);
int first=find(&a,d); //d has some value from the upper portion of the code
}
int find(vector <int>* a,int o)
{
int b=o;
while(a->b!=0)
b=a->b;
return b;
}
Q1:为什么传递像find(a,d)这样的矢量就像在数组中那样工作。?
Q2:在find函数中,为什么我必须使用“。”访问向量元素。或“ - &gt;”。不应该[b]工作吗?如果这是正确的方法那么为什么[b]在主函数中起作用?
问题3:代码出了什么问题?当我编译时,我得到错误
In function ‘int find(std::vector<int>*, int)’:
error: ‘class std::vector<int>’ has no member named ‘b’
我理解错误,但是如何访问所需的元素?
提前致谢。 :)
答案 0 :(得分:6)
为什么传递像find(a,d)这样的向量不像在数组中那样工作。?
通过“衰减”将数组传递给指向第一个元素的指针;所以他们通过引用有效地传递。
向量是简单的对象类型,除非声明函数采用引用,否则按值传递。按值获取的函数将获得它的单独副本。
您可以通过引用更改函数以获取向量:
void find(const std::vector<int> & a, int o);
^
const
是可选的,但如果函数不需要修改向量,那么这是一个非常好的主意。
在find函数中,为什么我必须使用“。”访问向量元素。或“ - &gt;”。
你没有。您可以像这样访问向量本身的类成员(例如size()
)。
a[b]
不应该有用吗?
如果a
是对象或引用,那就是它。由于它是指针,因此您必须取消引用它(*a)[b]
如果这是正确的方法,为什么
a[b]
在主函数中起作用?
在main函数中,'a'是一个对象,因此可以直接用作操作数。
答案 1 :(得分:0)
你应该学习矢量,模板,c ++方法来做到这一点。
看看:http://www.cplusplus.com/reference/vector/vector/
Q1:为什么传递像find(a,d)这样的矢量就像在数组中那样工作。?
因为它不是一个数组,它是一个对象,所以你可以将它作为副本传递而不是引用它,如果你改变它,你只需将它作为参考传递。
Q2:在find函数中,为什么我必须使用“。”访问向量元素。或“ - &gt;”。不应该[b]工作吗?如果这是正确的方法那么为什么[b]在主函数中起作用?
[position]返回元素 a-&gt; b不起作用,你不能将b作为元素访问 使用a-> at(位置)访问向量中的每个元素
示例(您也可以使用迭代器)
for(int x=0; x<a->size();x++)
cout << a->at(x);
问题3:代码出了什么问题?当我编译时,我得到错误
上一个问题回答了这个问题。 你没有b元素,A是一个包含元素的向量。 如果你想在位置B处获得元素,请执行a - >;(b)。 如果你想找到使用
for(int x=0; x<a->size();x++)
if(a->at(x) == b) return x; //returns the position
答案 2 :(得分:0)
你说的是:
int b = o;
while(a->b!=0)
b=a->b;
return b;
当你的意思是:
for(vector<int>::const_interator i = a.begin(); i != a.end(); ++i)
if (*a == o)
return a.end() - i;
return a.size();