c++ - 在基于范围的 for 循环中从 std::vector<Object> 获取指向对象的指针

标签 c++ pointers vector

我有一个对象 vector - journal:

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

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

最佳答案

问题出在这里:

const auto &element : journal

您将 const 引用绑定(bind)到每个元素。所以当你用它来获取地址时,你会得到一个指向 const 元素的指针。并且您不能将它传递给需要指向非 const 限定对象的指针的函数。

只需删除 const 限定符:

auto &element : journal

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

关于c++ - 在基于范围的 for 循环中从 std::vector<Object> 获取指向对象的指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48735056/

相关文章:

c++ - 如何按索引从 std::vector<> 中删除元素?

c++ - Qt 和 native 菜单

c++ - 按指定的顺序迭代元组的元素

c++ - 约定结果和代码错误 C++ int foo (...)

c - 指针数组,停止运行

c++ - 将 vector 的 end() 传递给 std::vector::erase 是否有效?

c++ - 按值传递的参数在 Visual Studio 2010、C++ 的调试器中显示为按引用传递

c - 带有函数指针的 Memcpy 会导致段错误

c - 将 (const char *) 分配给执行十六进制代码的函数指针

java - 访问存储在 vector 中的对象的变量