在基于范围的for循环中从std :: vector <object>获取指向Object的指针

时间:2018-02-11 18:41:39

标签: c++ pointers vector

我有一个对象矢量 - journal

    std::vector<Object> journal;
    std::vector<Object*> filteredJournal;
    for (const auto &element : journal) {
            if (element.data[1] == user) {
                filteredJournal.push_back(&element);
            }
    }

我想填充指向这些对象的指针向量filteredJournal,并指向journal中的特定对象。我尝试在&上使用element,但当然它给了我一个错误,我为push_back()函数提供了错误的参数。什么是正确的方法呢?

1 个答案:

答案 0 :(得分:4)

问题在于:

const auto &element : journal

将const引用绑定到每个元素。因此,当您使用它来获取地址时,您将获得指向const元素的指针。并且您不能将它传递给期望指向非const限定对象的指针的函数。

只需删除const限定符:

auto &element : journal

关于迭代器,引用和指针失效的常见警告当然适用。确保filteredJournal的持续时间不超过其指针保证指向有效对象的时间跨度。