gpt4 book ai didi

c++ - 在 Windows XP 中使用 C/C++ 中的动态数组最简单的方法是什么?

转载 作者:行者123 更新时间:2023-11-28 03:56:05 25 4
gpt4 key购买 nike

我需要将 HANDLE 类型的实例保存到数组容器中并对其进行迭代,最后在必要时删除其中一些,

为了方便起见,我应该使用哪个容器?<​​/p>

最佳答案

最好的一个将取决于您将如何访问它以及您将从哪里删除元素。

std::vector通常应该是您的默认选择。在这里您可以迭代 HANDLE 元素并且存储是高效的。删除时可能会出现 vector 问题。如果要从容器中间移除元素,vector 的效率不如 list。或 set它将使您正在删除的元素之外的所有迭代器无效。请注意,从中间删除时,列表比 vector 的性能更高,但列表的空间效率不是很高。我通常仅将列表用作最后的手段。使用列表的一个很好的选择是 deque容器,如果您只需要从容器的末端高效移除。

如果您需要对数据进行排序(即不使用 std::sort 之类的东西对 vector 进行排序),您想从任何地方删除而不会使其他迭代器失效,那么集合可能正是您要找的。

应该注意的是,我假设您的 HANDLE 类是一个指针,或者是一个符合 C++ std 容器中存储标准的类。 (复制语义等)如果使用指针,那么您也将负责关闭和/或释放指针所引用的资源。这应该通过一些 RAII 类来完成。你不应该为此使用 auto_ptr,因为它不符合存储在标准容器中的要求。但是,您可以使用 shared_ptr Boost 提供的类图书馆。

这是一些 general info所有这些容器和 C++ 中可用的其他容器选项。

这是一个简单的示例,说明如何使用引用页面中的 vector 。您可以轻松地使用它并使用 HANDLE 类/句柄生成您想要的东西。我还添加了一个示例循环,它也通过迭代器打印内容。

// erasing from vector
#include <iostream>
#include <vector>
using namespace std;

int main ()
{
unsigned int i;
vector<unsigned int> myvector;

// set some values (from 1 to 10)
for (i=1; i<=10; i++) myvector.push_back(i);

// erase the 6th element
myvector.erase (myvector.begin()+5);

// erase the first 3 elements:
myvector.erase (myvector.begin(),myvector.begin()+3);

cout << "myvector contains:";
for (i=0; i<myvector.size(); i++)
{
cout << " " << myvector[i];
}
cout << endl;

// Using iterators
cout << "myvector contains (using iterators):";
for (vector<unsigned int>::const_iterator it = myvector.begin();
it != myvector.end();
++it)
{
cout << " " << *it;
}
cout << endl;
return 0;
}

关于c++ - 在 Windows XP 中使用 C/C++ 中的动态数组最简单的方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3556241/

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