【问题标题】:Printing a Vector that was passed to a print function [closed]打印传递给打印函数的向量[关闭]
【发布时间】:2018-10-02 15:09:02
【问题描述】:

This is the code that I have written

我在尝试打印向量值时遇到错误,我不知道为什么。 我将数组传递给函数print(&v1)。 有人可以帮我弄清楚为什么会发生这个错误,以及是否有更好的替代方法来打印出我的函数中的向量元素。

【问题讨论】:

  • 请在问题中包含代码和错误作为文本。另请阅读minimal reproducible example
  • 您对指针和引用有一些误解。我认为这不是一个尝试教授的好地方,您应该选择good book,或者请您的老师再次解释这些概念。
  • 您问题的简单答案是将print 中的v[x] 更改为(*v)[x],但我认为这对您的理解没有太大帮助。 (这是一种修复方法,但可能不是最好的修复方法)。
  • print1 似乎是正确的。为什么要在print 中使用指针?与一些老师试图让你相信的相比,你需要的指点要少得多。
  • vector<int> *v -> vector<int> & v

标签: c++ function vector


【解决方案1】:

您在print1 中正确使用了-> 而不是.(就像在print 中一样)来操作指向向量的指针。这是因为x->y 等价于(*x).y,这意味着您在访问它之前正确地取消了指向向量的指针。

[] 除外。在这里,您还必须在使用[] 之前取消引用指针。所以:

cout << (*v)[x] << endl;

(*x)[] 没有像 (*x).y 那样的缩写(也称为“语法糖”),因此您必须手动完成。


错误消息令人困惑,因为在 指针 上使用 [] 是有效的 - x[y] 等效于 *(x+y),这意味着您正在执行指针算术:您使用 v 作为如果它是一个(C 风格的)向量数组,并且您尝试从这个向量数组中获取 xth 元素。幸运的是,编译器不知道如何将 &lt;&lt; 和 Vector 与 cout 联系起来 - 但如果可以,代码将编译并执行您(可能)不打算执行的操作。

【讨论】:

    猜你喜欢
    • 2012-04-13
    • 1970-01-01
    • 2021-02-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-05
    • 1970-01-01
    相关资源
    最近更新 更多