c++ - 将临时修改的 vector 传递给函数

标签 c++ vector

在回溯问题中,我需要将一个 vector 传递给一个函数,以便在每个级别修改 vector :

void function(std::vector <int> vec){
    vec.push_back(0); // Initial modification
    function(vec);

    vec.pop_back(); // Return to previous state

    vec.push_back(1); // Second modification
    function(vec);

    return;
}

我省略了多余的代码。

有什么方法可以简化 vector 修改,这样我就不必事后 pop_back 了吗?

最佳答案

您可以创建一个 guard 类,在销毁时自动为您调用 pop_back:

template <typename T>
class push_pop_guard
{
private:
    std::vector<T>& _v;

public:
    template <typename Item>
    push_pop_guard(std::vector<T>& v, Item&& x) : _v{v} 
    { 
        _v.push_back(std::forward<Item>(x));
    }

    ~push_pop_guard()
    {
        _v.pop_back();
    }
};

使用示例:

void function(std::vector <int> vec)
{
    {
        push_pop_guard ppg{vec, 0};
        function(vec);
    }

    // ...
}

关于c++ - 将临时修改的 vector 传递给函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47743706/

相关文章:

c++ - 创建远程线程会使进程崩溃

c++ - 在 MFC 中显示多个位图

c++ - C++11 中多种数值类型的 vector

c++ - lambda 中值捕获的 std::move() 上的 decltype() 导致类型不正确

c++ - boost::condition_variable.timed_wait 立即返回

c++ - 球体世界实现 C++

c++ - OpenCV 创建每行包含多个图像的矩阵

c++ - 使用指向文件的指针从 vector 中保存对象

c++ - 在cpp中将元素分配给 vector

matlab - 在 Octave 中加载输入文件并创建向量和矩阵