我的任务主要包括在C++
中添加或删除数组中的元素。由于数组不是动态的,但对它们的操作非常快,我一直在寻找一种几乎同样快速运行的动态数据结构。我一直在考虑std::vector
,但由于它是预定义的并且非常庞大的构造,我担心操作的时间对我来说至关重要。任何人都可以向我提供有关您观点的一些信息吗?我很乐意得到你的任何帮助!
编辑:
我真的很抱歉,我没有在我的问题中包含所有重点;下面我尝试添加更多信息:
我相信这将有助于我的帖子更清晰,更具体,因此对其他人更有用。
感谢您的所有答案!
答案 0 :(得分:3)
答案 1 :(得分:0)
在STL中实现了不同的数据结构,以用于不同的原因。因此,当结构的开始,中间或结尾处的插入/删除速度或甚至结构元素的随机访问时,结构都不同。
答案 2 :(得分:0)
STL容器的简短比较:
http://john-ahlgren.blogspot.com/2013/10/stl-container-performance.html
如果您可以使用关联数组,则映射至少可以保证O(log n)的插入/查找时间,这对于大量数据/大量插入来说要快得多并且删除了非向后插入的向量保证O(n)。
不确定它们是否可以在这里工作,此链接还会在几个不同的容器上显示一些使用随机插入/删除/搜索/填充/排序等的基准图表:
http://www.baptiste-wicht.com/2012/12/cpp-benchmark-vector-list-deque/
最后,SO的流程图可以帮助您决定容器:
In which scenario do I use a particular STL container?
虽然不完美,但仍然可能会发现矢量是你最好的选择。
答案 3 :(得分:0)
使用数组实现的链表是否符合您的需求?
class AList
{
public:
AList()
{
for (int = 0; i != 256; ++i )
{
nodes[i].prev = (i-1+256)%256;
nodes[i].next = (i+1)%256;
}
}
int const& operator[](int index)
{
// Deal with the case where nodes[index].isSet == false
return nodes[index].data;
}
// Not sure what the requirements are for adding
// and removing items from the list.
//
// add();
// remove();
private:
struct Node
{
Node() : data(0), prev(0), next(0), isSet(false) {}
int data;
unsigned char prev;
unsigned char next;
bool isSet;
};
Node nodes[256];
};