C++ 中的向量是如何工作的

C++ 中的向量是如何工作的

C++ 中的向量可以在添加更多元素时调整大小。它还允许删除元素。

下面是当数组充满时,用户希望添加项的一个非常基本的想法。

1)在堆内存上创建一个更大的内存(例如双倍大小的内存)。

2)将当前内存元素复制到新内存中。

3)现在添加了新项目,因为现在有更大的内存可用。

4)删除旧内存。

但是实际的库实现可能更加复杂。如果我们每当当前数组变满(或即将变满)时创建一个新的双倍大小数组,并将当前元素复制到新的双倍大小数组中,则可以获得摊销时间复杂度为 O(1)。因此,特定的插入操作可能很昂贵,但总体时间复杂度仍为O(1)。请参见算法分析 | 第 5 集(分摊分析介绍)以获得证明。因此,push_back()的时间复杂度为 O(1)。

// CPP program to illustrate push_back()
#include <iostream>
#include <vector>
using namespace std;
  
int main()
{
    vector<int> 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 

向量中 erase()的时间复杂度是什么?
由于擦除元素需要移动其他元素(以确保随机访问),擦除的时间复杂度为O(n)。

// CPP program to illustrate
// working of erase() function
#include <iostream>
#include <vector>
using namespace std;
 
int main()
{
    vector<int> 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 

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程