gpt4 book ai didi

c++ - 我如何将静态 vector 添加到类中

转载 作者:太空宇宙 更新时间:2023-11-04 16:07:22 25 4
gpt4 key购买 nike

我有一个类,我想要一个 vector 在程序的生命周期中存在,所以我使用静态 vector 。

请查看我的代码并告诉我它们是否是使用静态变量的更好方法。

static std::vector<std::string> Stack;


class Test
{


public:
void AddStack(std::string str)
void PopStack()

};


void Test::AddStack(std::string str)
{

Stack.insert(Stack.end(),str.begin(),str.end());

}


void Test::PopStack()
{

if(!Stack.empty() )
{
Stack.pop_back();

}

}

最佳答案

选项 1

由于 Stack 仅用于实现 Test 的成员函数,因此将其设为 privatestatic 类的成员变量。

class Test
{
public:
void AddStack(std::string str);
void PopStack();

private:
static std::vector<std::string> Stack;
};

并在 .cpp 文件中添加:

std::vector<std::string> Test::Stack;

选项 2

通过函数调用而不是变量使 Stack 可用于 Test 的成员函数。

class Test
{
public:
void AddStack(std::string str);
void PopStack();

private:
static std::vector<std::string>& getStack();
};

实现:

std::vector<std::string>& getStack()
{
static std::vector<std::string> Stack;
return Stack;
}

void Test::AddStack(std::string str)
{
auto& Stack = getStack();
Stack.insert(Stack.end(),str.begin(),str.end());
}

void Test::PopStack()
{
auto& Stack = getStack();
if(!Stack.empty() )
{
Stack.pop_back();
}
}

选项 3

使 Test 成为单例,并使 Stack 成为该类的非static 成员。

class Test
{
public:

static Test& instance();
void AddStack(std::string str);
void PopStack();

private:
std::vector<std::string> Stack;
};

实现:

Test& Test::instance()
{
static Test theInstance;
return theInstance;
}

void Test::AddStack(std::string str)
{
Stack.insert(Stack.end(),str.begin(),str.end());
}

void Test::PopStack()
{
if(!Stack.empty() )
{
Stack.pop_back();
}
}

并将其用作:

Test::instance().AddStack("abcd");
Test::instance().PopStack();

关于c++ - 我如何将静态 vector 添加到类中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33228012/

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