搜索对象指针的向量
Searching a vector of object pointers
我有一个玩家类,其中类类型的每个对象都有一个名称,赢,输和平局。 Player 类的每个对象都是通过调用 the_player = new Player(the_name) 创建的。 当用户输入新名称以将 Player 对象添加到程序中时,指针将被推送到矢量 AllPlayer 中。 程序应在推送新指针之前检查所需的播放器是否在所述向量中尚不存在。 我必须在整个程序中多次执行此检查,因此我想我会为它编写一个函数。 这是我的函数:
int findPlayer(vector<Player*> &vals, string name_in)
{
for (int i = 0; i < vals.size(); i++){
if (vals[i]->getName() == name_in){
cout << vals[i]->toString() << endl;
return i;
}
else
return -1;
}
};
当请求添加新播放器的选项时,使用以下代码:
do {
cout << "Name: ";
cin >> the_name;
if (findPlayer(AllPlayers, the_name) != -1){
cerr << "Player already existsn";
}
} while (findPlayer(AllPlayers, the_name) != -1);
the_player = new Player(the_name);
AllPlayers.push_back(the_player);
但是,出于某种原因,每次我尝试添加新播放器时,它都会抛出"玩家已经存在"并且永远不会离开do-while循环。 当 AllPlayer 向量为空时也是如此。 我添加了一个 cout <<findPlayer(AllPlayers,the_name) 进行调试,它打印了4192252我认为这是向量中可能的最大元素。
所以问题是:为什么它返回4192252而不是 -1?
vals
为空,则永远不会进入for循环,并且函数在没有点击return语句的情况下退出。这意味着你会得到一个随机值,在这种情况下,4192252
恰好在返回寄存器中。如果您阅读编译器警告,它们将告诉您这一点。
你怎么想,如果 vals 为空,从 findPlayer 返回什么?
它被定义了吗?
如果向量为空,则根本不进入循环,因此不要到达 return
语句,也不返回有效值。应启用编译器警告以捕获此错误。
否则,您只需检查第一项,并立即返回它是否匹配。如果找到匹配项,则返回,但继续查找,并且仅在没有匹配项时返回 -1:
for (int i = 0; i < vals.size(); i++){
if (vals[i]->getName() == name_in){
cout << vals[i]->toString() << endl;
return i;
}
}
return -1;
find player 函数应该是这样的:
int findPlayer(vector<Player*> &vals, string name_in)
{
if(vals.size() == 0)
return -1;
for (int i = 0; i < vals.size(); i++){
if (vals[i]->getName() == name_in){
cout << vals[i]->toString() << endl;
return i;
}
}
return -1;
};
按以下方式重写函数
bool findPlayer( const std::vector<Player*> &vals, const std::string &name_in )
{
std::vector<Player*>::size_tyoe i = 0;
while ( i < vals.size() && vals[i]->getName() != name_in ) ++i;
return i != vals.size();
}
考虑到成员函数getName
必须使用限定符const
定义。
至于你的函数,那么当向量为空时,它不返回任何内容,或者在向量的第一个元素与字符串不一致的情况下返回 -1。
请注意,在标头<algorithm>
中声明了标准算法std::find_if
可以使用该算法代替函数。
- 函数向量_指针有不同的原型,我可以构建一个吗
- 有没有一种"cleaner"的方法可以在指向基的指针向量中找到派生类的第一个实例?
- 使用向量类的c++指针
- 如何使用C++初始化向量;脚本化值不是数组、指针或矢量错误
- 如何更改唯一指针向量的可见性
- C++ 独特指针练习的向量
- C 中的向量指针的清晰图
- 当向量位于内部类中时,如何删除指向对象的向量指针
- std::向量指针
- 指向结构体的向量指针错误
- 删除指向指针的向量指针时出错
- 映射不同类型的向量指针
- 在c++中传递向量指针
- 虚拟类的向量:指针是干净的方法吗
- 如何从另一个向量/对象集构造新的向量/指针集
- 模型视图控制器- c++向量指针,太多的传递
- 为什么向量指针占用这么多内存?
- 删除条目向量指针的静态映射c++
- 复向量指针
- c++数组向量指针的初始化