gpt4 book ai didi

C++ 从数组列表中删除元素

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

为了将来实用,我将使用标准库的 vector ,但现在我正在尝试创建一些基本数据结构以更好地学习 C++(我正在从 Java 迁移)。

除了 remove 方法外,我几乎所有的东西都可以正常工作。我想获取要从数组中删除的元素

template <class generic_type> generic_type & ArrayList<generic_type>::remove(const unsigned int index)
{
check_range_get(index);
generic_type & temp = data_array[index];
for(int i=index;i<size()-1;++i)
{
data_array[i]=data_array[i+1];
}
--number_of_elements;
return temp;
}

该方法删除了正确的索引,因此如果您有数字 0 到 4 的集合。

0, 1, 2, 3, 4

如果我们用索引 0 调用我的 remove 方法,你会得到:

1, 2, 3, 4

但是,它没有返回正确的数字。它返回 1 而不是返回 0。我相信这是因为我的方法覆盖了对第一个索引中数字的引用。

要解决此问题,我可以将 generic_type & temp 更改为 generic_type temp,这将返回正确的值,但据我了解,这意味着 的值为actually duplicated 复制了一份。对于一个简单的原始类型,这还不错;但是对于我们集合中具有更大 N 大小的更复杂的对象,复制听起来并不是最好的选择。

有办法解决这个问题吗?在此先感谢大家。

最佳答案

要优化此代码,一种可能的解决方案是使用 C++11 的移动语义:

#include <utility>

generic_type temp{ std::move(data_array[index]) };

并返回此按值,而不是引用。

此外,请注意您已经在循环中制作了很多拷贝。您可以在那里应用相同的技术:

for(int i=index;i<size()-1;++i)
{
data_array[i] = std::move(data_array[i+1]);
}

关于C++ 从数组列表中删除元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25470220/

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