我有一个测试即将进行,似乎有些问题涉及 STL 类模板函数。许多处理算法复杂性,所以我试图降低基本操作的复杂性。我发现令人困惑的是插入操作。插入操作采用给定的容器,允许从迭代器指向的某个位置开始插入:
vector<int> vector1;
for (int i=1; i<6; i++) vector1.push_back(i);
vector<int>::iterator it;
it = vector1.begin();
vector1.insert(it+2,10);
现在,我认识到对于大多数插入操作来说,这个插入操作将花费线性时间。但是,如果我要插入一个项目,这仍然需要线性时间吗?我问这个是因为对于列表 STL,插入单个项目需要恒定的时间。我想这是因为 list 是一个动态的双链循环链。
vector 是一个动态的、连续的存储结构,那么这是否意味着对于 vector[size-1] 之前的任何插入,插入之后的所有项都必须向上移动一个单位?
现在,对于双端队列。我认为双端队列 STL 是一个由数组中的指针指向的单链系统;这个对吗?如果是这种情况,将单个插入到双端队列中,而不是在前面或后面,是 O(1) 吗?
谢谢,抱歉问了这么多问题。