在回溯问题中,我需要将一个 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/