c++ - 使用存储在 vector 中的对象的正确方法是什么?

标签 c++ vector reference

来自 Java,我对如何正确访问存储在 vector 中的对象感到困惑。

在此测试用例中,我希望两个输出显示相同的数字 (2):

#include <iostream>
#include <vector>

using namespace std;

class Item {
public:
  int id = 0;
  Item(int id)
  {
    this->id = id;
  }
};

int main()
{
  vector<Item> items;
  Item item = Item(1);
  items.push_back(item);

  Item itemFromVector = items.at(0);
  itemFromVector.id = 2;

  cout << "item: " << item.id << endl;
  cout << "itemFromVector: " <<  itemFromVector.id << endl;
}
// output:
// item: 1
// itemFromVector: 2

最佳答案

在这种情况下,您的 item.id 将等于 1。

这背后的原因是 push_back 调用将执行 vector 中对象的 COPY( vector 中的 Itemitem是 2 个不同的对象)。

观察您要实现的目标的一种方法是使用指针:

int main()
{
  vector<Item*> items; //items contains addresses of Item object
  Item item = Item(1);
  items.push_back(&item); // push address of your item

  Item* itemFromVector = items.at(0); // Pointer to item
  itemFromVector->id = 2; // Modify item id attribute

  cout << "item: " << item.id << endl; // Access item id attribute
  cout << "itemFromVector: " <<  itemFromVector->id << endl; // Access item id attribute
}

关于c++ - 使用存储在 vector 中的对象的正确方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33597582/

相关文章:

c++ - 如何将 vector<string> 的元素复制到字符串中?

c++ - 使用迭代器从 vector 中查找子字符串

c++ - 在堆上声明对象然后通过引用传递它?

c++ - 在这种情况下,将另一个对象的引用作为成员保存是否安全?

c++ - string pop_back 是如何在常数时间内实现的?

c++ - HLSL 在代码中获取线程组数和线程数

c++ - 在 C++ 中拆分和合并 std::list

c++ - 如何在Visual Studio 2017中编译7zip源代码?

使用 cut() 添加十分位数列时接收 NA

c++ - 默认复制构造函数处理const吗?