gpt4 book ai didi

c++ - 如何在函数调用之间存储双端队列值

转载 作者:行者123 更新时间:2023-11-30 01:55:19 25 4
gpt4 key购买 nike

例如:

#include <iostream>
#include <deque>

int func(int a){
std::deque<int> obj;
obj.push_back(a);
for(std::deque<int>::iterator it = obj.begin(); it!=obj.end();++it)
std::cout << *it << '\n';
return 0;
}
int main()
{
int x=2;

func(x);
func(x);
}

输出是:

2  
2

所以这意味着双端队列对象在到达 func 的结束范围后销毁。我对此无能为力,除了返回值或添加到全局范围之外?没有办法通过向他添加静态或静态指针或其他东西来改变这个对象的行为吗?我的意思是纯 C++ 看起来像:

int func(int a){
static int *p = new int;
}

值将存储在函数调用之间,但我不知道如何对 STL 容器执行相同的操作。

最佳答案

如果你真的希望它是静态的,就这样:

static std::deque<int> obj;

虽然这可能是个坏主意:从概念上讲,您在程序中隐藏了状态,实际上,有可能在对象被销毁后访问它。 (您可以通过使用动态分配和泄漏对象来解决生命周期问题,如 Drax 的回答所示,如果您真的想走这条痛苦的道路)。

更好的方法是将状态封装在一个类中。然后您可以准确控制它何时创建和销毁,并且如果您愿意,可以拥有多个实例。

class thing {
public:
int func(int a) {
obj.push_back(a);
// and print it
}
private:
std::deque<int> obj;
};

int main() {
thing t;
t.func(2); // 2
t.func(3); // 2 3
}

关于c++ - 如何在函数调用之间存储双端队列值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20839530/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com