添加更多元素时,C++中的Vector可以调整自身大小。它还允许删除元素。
下面是一个非常基本的想法,当数组变满并且用户希望添加项目时。
1)在堆内存上创建更大的内存(例如,双倍大小的内存)。
2)将当前内存元素复制到新内存中。
3)由于现在有更大的可用内存,因此现在添加了新项目。
4)删除旧内存。
但是,实际的库实现可能更复杂。如果我们在当前数组已满(或即将满)时创建一个新的双精度数组,并将当前元素复制到新的双精度数组,我们得到的摊余时间复杂度为O(1)。因此,特定的插入操作可能会很昂贵,但总体时间复杂度仍为O(1)。请参考算法分析|设置5(摊销分析简介)作为证明。因此push_back()的时间复杂度为O(1)。
// CPP program to illustrate push_back()
#include
#include
using namespace std;
int main()
{
vector myvector{ 1, 2, 3, 4, 5 };
myvector.push_back(6);
// Vector becomes 1, 2, 3, 4, 5, 6
for (auto x : myvector)
cout << x << " ";
}
输出 :
1 2 3 4 5 6
vector()中的delete()的时间复杂度是多少?
由于擦除一个元素需要移动其他元素(以确保随机访问),因此擦除的时间复杂度为O(1)。
// CPP program to illustrate
// working of erase() function
#include
#include
using namespace std;
int main()
{
vector myvector{ 1, 2, 3, 4, 5 };
auto it = myvector.begin();
myvector.erase(it);
// Printing the Vector
for (auto x : myvector)
cout << x << " ";
return 0;
}
输出 :
2 3 4 5
要从最佳影片策划和实践问题去学习,检查了C++基础课程为基础,以先进的C++和C++ STL课程基础加上STL。要完成从学习语言到DS Algo等的更多准备工作,请参阅“完整面试准备课程” 。