传递给函数时找不到c ++向量?

Posted

技术标签:

【中文标题】传递给函数时找不到c ++向量?【英文标题】:c++ vector not being found when passed to function? 【发布时间】:2019-07-24 17:35:07 【问题描述】:

编辑:显然这段代码很好,但由于某种原因不适用于 Atom 的内置 c++ 编译器。

所以我试图在 C++ 中创建一个程序,该程序接受一个数组,然后返回该数组中所有数字的平均值。从那以后,我了解到任何数组都传递给函数“衰减”为指针,并指向向量的方向。但是,我被困在这段代码上,它似乎没有打印出任何东西。我已经尝试通过在 for 循环期间打印它来进行调试,但它仍然没有打印任何东西。这是否意味着它根本没有找到向量大小,只是在它开始之前结束?它没有抛出任何错误,所以我不确定。如何让这个输出这个向量的平均值?提前谢谢!

#include <iostream>
#include <vector>
using namespace std;

vector<int> arr = 1, 2, 3, 4, 5, 6;

void avg(vector<int> array)
  double total = 0;
  for (int i = 0; i < array.size(); i++)
    total += array[i];
  
  double average = total/array.size();
  cout << average;


main()
avg(arr);


【问题讨论】:

您的代码对我来说似乎没问题。但是可以通过引用传递来改进它,比如void avg(vector&lt;int&gt;&amp; array) 可以确认,您的代码在我的电脑上运行良好 你需要一个 main 的返回类型,int main() 否则代码对我来说很好。 除了 int main 中缺少的 int 之外,它应该可以工作 我得到3.5 作为输出,对我来说似乎没问题。 【参考方案1】:

您的输出流可能已缓冲。尝试在末尾添加换行符,如下所示:

cout << average << endl;

【讨论】:

感谢您的建议!这有帮助,但我发现 Atom 可能有些问题。 这可能只是 VS 和 Atom 之间的底层实现差异。更多信息:en.cppreference.com/w/cpp/io/manip/endl。如果您是从命令提示符运行的,那么您应该在程序退出时看到一些输出;如果不是,那将无法解释。【参考方案2】:
Below code is working for me, I guess you forgot to pause the result screen

#include <iostream>
#include <vector>
using namespace std;

vector<int> arr = 1, 2, 3, 4, 5, 6;

void avg(vector<int> array) 
  double total = 0;
  for (int i = 0; i < array.size(); i++) 
    total += array[i];
  
  double average = total / array.size();
  cout << average;


int main() 
  avg(arr);
  system("pause");
  return 0;

【讨论】:

感谢您的建议!我发现 Atom 可能有些问题,因为代码在 Visual Studio 中运行良好。

以上是关于传递给函数时找不到c ++向量?的主要内容,如果未能解决你的问题,请参考以下文章

如何将结构数组从 c++ 传递到 c#?

将指针向量传递给c ++中的函数[重复]

C++11 线程:将向量传递给线程函数时出错

C ++将向量传递给函数:引用与指针,哪个是首选? [复制]

将字符串向量传递给函数和函数原型问题c ++

在 Shiny 中获取与反应式表达式相关的“错误:找不到函数”