Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将向量传递给函数会产生错误。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 - Fatal编程技术网

将向量传递给函数会产生错误。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++ 这是一个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’ 我理解这

问题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’
我理解这个错误,但是如何访问所需的元素呢


提前谢谢

> 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相同;