📜  向量在C++中如何工作?

📅  最后修改于: 2021-05-30 02:25:21             🧑  作者: Mango

添加更多元素时,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等的更多准备工作,请参阅“完整面试准备课程”