我正在尝试为我的AddItem
创建DeleteItem
和array<Email, MAX_SIZE>
函数,名为ulist
。
问题是,它正在创建变量的本地副本并添加它。
我是指针的新手,所以这可能是一个非常简单的错误,但是现在大约一个小时让我感到沮丧。
以下是代码:
void UnsortedList::AddItem(Email &item)
{
cout << "Going to add " << &item << endl;
list[Length] = item;
cout << "Added " << &list[Length] << endl;
Length++;
}
来自司机:
Email e1("sender", "content");
UnsortedList ulist;
ulist.Add(e1);
输出:
Going to add 0018F6FC
Added 0018D09C
答案 0 :(得分:2)
如果您希望list
仅存储指向添加项的指针,请将其声明为const Email
的指针向量:
std::vector<const Email*> list;
然后,使用其指针将每个新电子邮件插入向量:
void UnsortedList::AddItem(const Email &item) {
list.push_back(&item);
}
但请注意:您需要在程序中确保Email对象的生命周期长于列表的生命周期,否则列表将包含指向已解除分配对象的无效指针。
答案 1 :(得分:0)
问题是list
是一个Email
的数组...而不是Email *
的数组。因此,即使您将Email &
传递给AddItem
,Emai
也会将list
复制到array<Email *, MAX_LENGTH]> list;
。
相反,你会想要这样的东西:
list[Length] = &item;
然后是作业;
def users_by_role(role):
users = User.objects.all()
ids = [user.id for user in users if user.role == role]
return users.filter(id__in=ids)
除此之外别无选择。如果数组不存储指针,则在存储到数组中时必须进行复制。