aan*_*dis -3 c++ arrays vector
这是一个noob问题,对不起,我刚开始在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;
}
Run Code Online (Sandbox Code Playgroud)
Q1:为什么传递像find(a,d)这样的向量不像在数组中那样工作.
Q2:在find函数中,为什么我必须用"."访问向量元素.或" - >".不应该[b]工作吗?如果这是正确的方法那么为什么[b]在主函数中起作用?
问题3:代码有什么问题?当我编译时,我得到了错误
In function ‘int find(std::vector<int>*, int)’:
error: ‘class std::vector<int>’ has no member named ‘b’
Run Code Online (Sandbox Code Playgroud)
我理解错误,但是如何访问所需的元素?
提前致谢.:)
为什么传递像find(a,d)这样的向量不像在数组中那样工作.
数组通过"衰减"传递到指向第一个元素的指针; 所以他们通过引用有效地传递.
向量是直接的对象类型,除非声明函数采用引用,否则按值传递.按值获取的函数将获得它的单独副本.
您可以通过引用更改函数以获取向量:
void find(const std::vector<int> & a, int o);
^
Run Code Online (Sandbox Code Playgroud)
这const是可选的,但如果函数不需要修改向量,这是一个非常好的主意.
在find函数中,为什么我必须使用"."访问向量元素.或" - >".
你没有.您可以size()像这样访问向量本身的类成员(例如).
不应该
a[b]工作?
它会a是一个对象或参考.因为它是一个指针,你必须取消引用它,(*a)[b]
如果这是正确的方法那么为什么
a[b]在主函数中工作?
在main函数中,'a'是一个对象,因此可以直接用作操作数.