gpt4 book ai didi

c++ 对 vector 问题的引用?

转载 作者:太空狗 更新时间:2023-10-29 19:49:48 25 4
gpt4 key购买 nike

我在将对 vector 的引用作为参数传递时遇到了一些困难。最初它是一个指向指针 vector 的指针,被调用的函数将改变调用它的任何对象的属性。例如我使用:

(*myVector)[i]->myFunction();

一切都很完美。 myFunction() 将翻译任何对象是 myVector 的当前索引。

现在我已经更改了 vector 以保存一组对象,而不是像原来那样指向对象的指针。我没有传递指向 vector 的指针,而是传递了它的引用。我按如下方式访问该功能:

myVector[i].myFunction();

通过编译,我发现 myFunction() 不再具有与以前相同的结果。我使用了一个断点,看到它正在改变它应该改变的属性,但是,这些改变从未对原始对象产生影响。即使断点显示 myVector[i] 的来源已更改,也没有最终翻译。

我尝试将指针传递给对象 vector 并使用:

(*myVector)[i].myFunction();

同样的事情,它编译了但没有工作。

最后,我尝试简单地传递对 vector 中第一个对象的引用,当然效果很好:

myObject.myFunction();

关于 vector 的引用,我是否遗漏了一些固有的东西?为什么指向指针 vector 的指针有效,而指向对象 vector 的引用却不起作用?传递的 vector 不应该是原始 vector 的别名吗?为什么引用显示更改而不是它引用的对象?

除非我使用指针 vector 而不是对象 vector ,否则为什么我的更改不会生效。

最佳答案

等一下。当您更改此代码段时:

(*myVector)[i]->myFunction()

对此:

myVector[i].myFunction()

你实际上改变了两件事:

  1. myVector从指针到引用;
  2. myVector 中元素的类型从指针到简单值类型。

如果您将元素的类型更改为简单值类型(如 std::vector<int*>std::vector<int> ),那么当您将它们添加到 vector 时,它们将被复制到它。 ( vector 的传递方式,即通过指针或引用,不会影响此行为。 vector 的传递方式和 vector 内部对象的传递方式是完全独立的。)这意味着无论何时您对它们进行更改,您只会更改 vector 内的版本。

使用包含指针的 vector 并没有错(只要您以合理的方式进行内存管理)。如果您希望将 vector 中版本的更改复制到原始版本,则必须使用引用或指针。由于让 vector 包含引用(如 std::vector<int&> )是一个痛苦的世界,如果可能的话,您可能更喜欢指针。

关于c++ 对 vector 问题的引用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6406475/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com