将向量传递给函数会产生错误。C++ 这是一个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; }
问题1:为什么像finda,d这样的传递向量不能像在数组中一样工作 问题2:在find函数中,为什么必须使用访问向量元素。或者->。a[b]不应该工作吗?如果这是正确的方法,那么为什么a[b]在主功能中工作 问题3:代码有什么问题?当我编译时,我得到了错误将向量传递给函数会产生错误。C++ 这是一个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; },c++,arrays,vector,C++,Arrays,Vector,问题1:为什么像finda,d这样的传递向量不能像在数组中一样工作 问题2:在find函数中,为什么必须使用访问向量元素。或者->。a[b]不应该工作吗?如果这是正确的方法,那么为什么a[b]在主功能中工作 问题3:代码有什么问题?当我编译时,我得到了错误 In function ‘int find(std::vector<int>*, int)’: error: ‘class std::vector<int>’ has no member named ‘b’ 我理解这
In function ‘int find(std::vector<int>*, int)’:
error: ‘class std::vector<int>’ has no member named ‘b’
我理解这个错误,但是如何访问所需的元素呢
提前谢谢 > P>学习矢量、模板、C++方式。 看看: 问题1:为什么像finda,d这样的传递向量不能像在数组中一样工作 因为它不是一个数组,而是一个对象,所以您可以将其作为副本而不是引用传递,如果您更改了值,您可以将其作为引用传递 问题2:在find函数中,为什么必须使用访问向量元素。或者->。a[b]不应该工作吗?如果这是正确的方法,那么为什么a[b]在主功能中工作 [position]返回元素 a->b不工作,您无法将b作为元素访问 使用->atposition访问向量中的每个元素 例如,您也可以使用迭代器
for(int x=0; x<a->size();x++)
cout << a->at(x);
问题3:代码有什么问题?当我编译时,我得到了错误
In function ‘int find(std::vector<int>*, int)’:
error: ‘class std::vector<int>’ has no member named ‘b’
前面的问题回答了这个问题。
你没有b元素,A是一个向量,它包含元素。
如果您想在位置B处获取元素,请执行a->atb。
如果你想找到它的用处
for(int x=0; x<a->size();x++)
if(a->at(x) == b) return x; //returns the position
为什么像finda,d这样的传递向量不能像在数组中一样工作
数组通过衰减为指向第一个元素的指针来传递;因此,它们有效地通过引用传递
向量是直接的对象类型,除非函数声明为引用,否则按值传递。按值获取它的函数将获得它的单独副本
您可以将函数更改为通过引用获取向量:
void find(const std::vector<int> & a, int o);
^
const是可选的,但是如果函数不需要修改向量,这是一个非常好的主意
在find函数中,为什么必须使用访问向量元素。或者->
你没有。您可以访问向量本身的类成员,比如像这样的大小
a[b]不应该工作吗
如果a是一个对象或引用,它就会出现。因为它是一个指针,所以必须取消对它的引用,*a[b]
如果这是正确的方法,那么为什么a[b]在主功能中工作
在主函数中,“a”是一个对象,因此可以直接用作操作数。您的意思是:
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();
我认为你可能需要找到一本书或在线教程,从基础开始@demonofnight不,不要那样做。堆栈上的向量很好,而且最好堆堆。是的,堆栈是最好的选择,我只是告诉他如果他想这么做,他会怎么做,因为他似乎对指针、C++中的引用有点困惑。在这个选项中,堆栈无疑是最好的选项。@crashmstr这是我第一次使用向量,所以是的,这是一个非常基本的问题。很抱歉我在谷歌上搜索过这个问题,但是没有得到任何适当的解释。但是在main函数中使用[b]不会产生任何错误,为什么?ZAK,它的操作符,你应该学习C++中的运算符,同样的方法CUT @克里斯多:那就是A- >运算符[]。1@MikeSeymour是的,哎呀,谢谢你的更正*a[1]=42;与->运算符[]1=42相同;