gpt4 book ai didi

C++ 列表插入

转载 作者:行者123 更新时间:2023-11-27 22:58:40 25 4
gpt4 key购买 nike

我正在尝试根据对象数据成员 family_id

以有序方式将对象插入到列表中

创建的第一个对象会跳过此函数,因此在执行此函数之前,列表中至少会有一个名为“families”的对象。

List 插入函数遇到了一些问题...如何使用此函数在迭代器 (itr) 之前或之后插入?我不确定是否要使用一些 push_front/push_back 方法,但是 if/else 语句这样会变得很长...

希望获得有关如何以简单方式创建它的想法。

家庭类

class Family
{
private:
int family_id;

public:
int get_family_id()
{
return family_id;
}
};

主要

list <Family> families;

void insertFamily(int input_id)
{
list<Family>::iterator itr;
for(itr = families.begin(); itr != families.end(); itr++)
{
if (input_id < itr->get_familyid())
{
Family *fam = new Family(input_id);
families.insert(itr, *fam);
// Does this insert the object into the first position of the list,
// bumping the original to the second position?
} else
itr++
}
};

最佳答案

如果您问的是我认为您在问的问题,insert 函数会将值放入给定的位置,并将其他所有内容推回。例如:

#include <list>
#include <iostream>
int main(){
std::list<int> my_list;
for(int i = 0; i < 5; i++)
my_list.push_back(i);
std::list<int>::iterator itr = my_list.begin();
++itr;
my_list.insert(itr, 5);
for(itr = my_list.begin(); itr != my_list.end(); ++itr)
std::cout << *itr << " ";
}

打印 0 5 1 2 3 4

因此,如果您希望它在您停止之前插入,只需按给定的方式调用插入即可;如果您想在停止后插入,请调用 ++itr然后进行插入。


编辑:如果我没看错你的代码,你还缺少一个 break 语句

Family *fam = new Family(input_id);
families.insert(itr, *fam);
break;
^^^^

当你完成时,这将打破 for 循环;没有它,您将继续为索引较低的每个家庭添加具有相同 ID 的新家庭。此外,您不需要 else 语句中的 itr++,因为它已经在您的 for 循环中被调用(除非您希望在不匹配时将其增加两次?)。那么您的代码可能如下所示:

主要

list <Family> families;

void insertFamily(int input_id)
{
list<Family>::iterator itr;
for(itr = families.begin(); itr != families.end(); itr++)
{
if (input_id < itr->get_familyid())
{
Family *fam = new Family(input_id);
families.insert(itr, *fam);
break; //Added break line
} //Removed else
};

如果你想要更快的插入,你可以看看 binary searching ,但除非您有一个非常大的列表,否则这不会有太大作用。除此之外,您的代码看起来还不错!

关于C++ 列表插入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29930475/

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