c++ - 通过类引用访问和改变 vector

标签 c++ reference vector

这是我能解决的最简单的问题,抱歉长度问题:

#include <vector>
#include <iostream>

class Bar
{
private:
    std::vector<int> intVector_;
public:
    Bar() {};
    void addInt(int newInt) 
    { 
        intVector_.push_back(newInt); 
        std::cout << intVector_.size() << " "; 
    };
    int getIntVectorSize() { return intVector_.size(); };
};

class Foo
{
private:
    Bar bar_;
public:
    Foo() { bar_ = Bar(); };
    Bar getBar() { return bar_; };
};

int main(char argc, char* argv[])
{
    Foo foo = Foo();
    foo.getBar().addInt(1);
    std::cout << foo.getBar().getIntVectorSize() << " ";
    foo.getBar().addInt(2);
    std::cout << foo.getBar().getIntVectorSize() << " ";
    foo.getBar().addInt(3);
    std::cout << foo.getBar().getIntVectorSize() << " ";
}

我的问题是,向 vector 添加一个 int 似乎只持续 addInt() 的持续时间。我的 vector 大小输出如下所示:

1 0 1 0 1 0

我对 C++ 和所有这些引用/指针业务相当陌生,所以我不知道如何解决这个问题,或者这是否可能。感谢您的帮助!

最佳答案

这是因为 getBar()value 返回一个 Bar,它为每个 bar_ 制作一个拷贝函数的调用,并且您正在修改临时 vector 。

您可以通过返回引用来避免这种情况:

class Foo
{
private:
    Bar bar_;
public:
    Foo() { bar_ = Bar(); }; // you prob. want to use an initialiser list btw.
    Bar& getBar() { return bar_; };
//     ^ notice the ampersand
};

这样,对 getBar 的返回值所做的任何修改都是在 bar_ 上完成的,而不是在语句结束时销毁的临时拷贝。

关于c++ - 通过类引用访问和改变 vector ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9337923/

相关文章:

r - R 中出现 "Variable Lengths Differ"错误的原因是什么?

c++ - 用户定义的转换运算符不适用于引用

c++ - gcc vector 扩展赋值运算符

r - 区分向量和 R 中的矩阵

java - 不满意的链接错误 : Android JNI

c++ - 生产者-消费者队列- std::queue 还是用户编写的链表?

c++ - 从 boost::time_duration 中检索微秒

c++ - Qt C++在创建对象中使用创建类的方法

c# - 有趣的 "params of ref"功能,有什么解决方法吗?

r - 如何在R中初始化固定长度的向量