提问人:Ramster445 提问时间:4/27/2023 最后编辑:cafce25Ramster445 更新时间:4/29/2023 访问量:133
在C++中,随机访问和push_back是否可能使元素无效?
Is random access and push_back without invalidating the elements possible in C++?
问:
基本上,我需要能够使用像 + 随机访问这样的操作,就像列表一样,同时还要保持其指针有效性,就像 do 一样。这可能吗?push_back()
std::vector
std::list
我正在使用指向列表中各种元素的指针,虽然提供对元素的随机访问,但所有内容都无效。std::vector
push_back()
答:
1赞
DreamerX
4/27/2023
#1
也许您听说过像哈希链表这样的数据结构?这种数据结构是链表的扩展,它在普通链表之上维护了一个额外的数组,这个数组的元素数与链表的元素数相同,只是它的元素是指向相应链表元素的指针。这种数据结构的优点是它允许随机访问并利用碎片内存。但这似乎与您的问题描述有些偏差?我不确定这是否能满足您的需求。
代码就是这样(很抱歉,我写答案的时间很少,所以我没有真正编译和运行它,也许代码还是有问题的,哈哈哈):
#include <list>
#include <vector>
templete<typename T>
class CHashList
{
public:
std::list<T> m_data;
std::vector<T*> m_pointer;
public:
void push_back(T newData)
{
m_data.push_back(newData);
m_pointer.push_back(&m_data.back());
}
T& operation[](int i)
{
return *m_pointer[i];
}
// other operations...
};
希望对您有所帮助。
0赞
vvv444
4/29/2023
#2
Boost's 为您的要求提供了现成的解决方案。stable_vector
从其文档中:
与向量一样,迭代器是随机访问的。 不提供元素连续性;作为这种缺席的交换,容器是稳定的,即只要元素不被擦除,对元素的引用和迭代器就保持有效。
stable_vector
stable_vector
评论
reserve()
push_back
end()