【问题标题】:How do I move a pointer in a vector of pointers to another index in that vector?如何将指针向量中的指针移动到该向量中的另一个索引?
【发布时间】:2021-05-23 19:46:42
【问题描述】:

编辑:

感谢您的帮助。我也想过使用 nullptr 应该可以工作:

v.at(1).ptr = v.at(0).ptr;

紧随其后

v.at(0).ptr = nullptr;


我正在做一个 C++ 项目,我有一个我创建的类的指针向量

向量大小为 64,包含 L 类型的指针

假设向量被称为 v

假设我在向量的第一个索引中有指针 1 (v.at(0))

我想将指针 1 移动到向量的第二个索引 (v.at(1))

这是我当前的代码:

v.at(1) = v.at(0);

第一个问题:这是设置第二个索引以保存当前存储在我的第一个索引中的指针的正确方法吗?

第二个问题:如何阻止我的第一个索引持有我的指针?

提前谢谢你! :D

【问题讨论】:

    标签: c++11 visual-c++


    【解决方案1】:

    这适用于交换算法。即

    // Swaps the entries at indices A and B in vector<L*> v
    void swap(int idxA, int idxB)
    {
        L* temp = v.at(idxA);
        v.at(idxA) = v.at(idxB);
        v.at(idxB) = temp;
    }
    

    【讨论】:

    • std::swap 存在。只是说……
    • 谢谢,这有帮助。我也想过使用nullptr。 v.at(newIndex) = v.at(oldIndex);和 v.at(oldIndex).ptr = nullptr;也可以吗?
    【解决方案2】:
    #include <algorithm>
    

    然后使用std::swap:

    std::swap(v.at(i_a), v.at(i_b));
    

    【讨论】:

    • 谢谢,这有帮助。我也想过使用nullptr。 v.at(newIndex) = v.at(oldIndex);和 v.at(oldIndex).ptr = nullptr;也可以吗?
    • @HusamChekfa:这与交换不同。交换使两个位置中的值交换位置。你用 nullptr 做的是交换。 STL 也有帮助地实现:std::exchange 这将适用于您所询问的v.at(newIndex) = std::exchange(v.at(oldIndex), nullptr))
    • 我明白了,所以 v.at(newIndex).ptr = std::exchange(v.at(oldIndex).ptr, nullptr) 将首先将 oldIndex 处的 ptr 值复制到newIndex,然后将 oldIndex ptr 设置为 nullptr ?
    • @HusamChekfa 完全正确。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-08-04
    • 1970-01-01
    • 2020-04-13
    • 2019-09-10
    • 2018-01-27
    • 1970-01-01
    • 2013-05-28
    相关资源
    最近更新 更多