gpt4 book ai didi

c++ - C++ 中的 STL 它是如何工作的

转载 作者:行者123 更新时间:2023-11-30 04:38:38 24 4
gpt4 key购买 nike

我有一个非常技术性的问题,我一直在使用 C,现在我正在学习 C++,如果我有这个类

class Team {
private:
list<Player> listOfPlayers;
public:
void addPlayer(string firstName, string lastName, int id) {
Player newPlayer(string firstName, string lastName, int id);
listOfPlayers.push_back(Player(string firstName, string lastName, int id));
}
};

这是玩家的声明:

class Player{
private:
string strLastName;
string strFirstName;
int nID;
public:
Player(string firstName, string lastName, int id);

};

这是我的 Player 构造函数:

Player::Player(string firstName, string lastName, int id){
nId = id;
string strFirstName = firstName;
string strLastName = lastName;
}

所以我的问题是当我调用函数 addPlayer 程序到底发生了什么,

在我的 Account 构造函数中,我是否需要为 new Player 分配新内存(因为在 C 中我总是使用 malloc)for strFirstName 和 strLastName,或者字符串的构造函数帐户和STL没有我做,提前致谢(如果你不想回答我的问题,请至少给我一些信息链接)提前致谢

最佳答案

这是您现在拥有的“正确”实现:

#include <list>
#include <string>

class Player
{
private:
std::string strLastName;
std::string strFirstName;
int nID;
public:
// You should pass std::strings to functions by const reference.
// (see Kirill V. Lyadvinsky's comment to OP's question)
Player(const std::string& firstName, const std::string& lastName, int id);
};

// What follows after the colon is called the initializer list.
Player::Player(const std::string& firstName, const std::string& lastName, int id)
: strFirstName(firstName), strLastName(lastName), nID(id) {}

class Team
{
private:
std::list<Player> listOfPlayers;
public:
void addPlayer(const std::string& firstName,
const std::string& lastName, int id)
{
// Constructs a Player instance and adds it to the list.
listOfPlayers.push_back(Player(firstName, lastName, id));
}
};

list 的 push_back() 函数分配了一个新节点,该节点包含 Player 实例和指向其他节点的指针,因此您有一种 Player 实例。

对于你关于Account的问题,如果你有这个:

class Account
{
private:
std::string strFirstName;
std::string strLastName;
};

那么您无需担心为字符数组分配/释放内存,因为 std::string 会为您处理。

关于c++ - C++ 中的 STL 它是如何工作的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3059649/

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