[面試] C++ STL(一)—— 向一個vector中新增N個元素,平均的新增的效能是?
考慮如下的程式碼輸出:
int N = 100;
vector<int> v;
set<int> s;
for (int i = 0; i < N; ++i)
{
s.insert(v.capacity());
v.push_back(i);
}
for (auto& e : s)
cout << e << " ";
cout << endl;
可以看到空間的變化是0,1,2,4,8,16,…,128.(注:GCC 編譯器是如此,vc 不是,二者提供了不同的 vector 實現)。
這就需要考慮到當空間不足時,需要開闢新的記憶體並且發生元素的copy(原始空間的釋放). 一般情況下(GCC)開闢的空間是原來的2倍。那麼平均的新增時間是:
平均下來依舊是O(N)。
相關推薦
[面試] C++ STL(一)—— 向一個vector中新增N個元素,平均的新增的效能是?
考慮如下的程式碼輸出: int N = 100; vector<int> v; set<int> s; for (int i = 0; i < N; ++i) { s.insert(v.capacity());
C++ STL(一)
一、STL基本概念 容器:可容納各種資料型別的通用資料結構 迭代器:用於依次存取容器中元素。 演算法:操作容器中元素的函式模板。 二、容器 1.容器概述 順序容器:vector,deque,list 關聯容器:set,multiset,map,multi
C++筆記(一)第一個c++程式
//myfirst.cpp /* #include預處理操作,意思是把標頭檔案的內容包含到此檔案中。 iostream是包含檔案,也叫標頭檔案. C中標頭檔案一般有後綴h,而純粹的C++則沒有,C++支援帶有後綴h的標頭檔案。 */ #include <
Linux C/C++教程(一)-- 面向過程和麵向物件
目錄 一、面向過程 二、面向物件 一、面向過程 面向過程是一種以過程為中心的程式設計思想。分析問題的解決步驟,通過函式一步步實現,然後順序呼叫函式來執行。主要缺點在於複用性、維護性、拓展性比較差。 二、面向物件 面向物件採用物件(實體)的方式建立抽象
C++面試常溫問題(一)
重點部落格記得看 常用的技術基礎主要包括:程式語言相關;資料結構,作業系統,計算機網路,計算機組成原理;資料庫相關;linux命令列相關;以及常用的工具等等。 程式語言常用有關於C++,python,golang,JAVA等,主要會根據幾種語言的特性來問。
一天練習一個小C/C++程式(一) 控制檯版“金山打字”遊戲
今天練習了一個C語言小程式,控制檯版的簡易“金山打字”小遊戲。 效果圖: 程式碼: #include<stdio.h> #include<stdlib.h> #incl
C++進修之STL(一)—— erase和remove特異行動
1: // 2: //Source code originally MSDN Channel 9 Video 3: //Modified by techmush 4: //NOTE: the original code may be perfect, the modified ver
C/C++面試知識點總結(一)
目錄: 一、基礎知識 1.C/C++ 2.STL 6.資料庫 一、基礎知識 1.C/C++ (1).struct大小的確定 由於記憶體對齊的原則,在32位機器上,記憶體是4位元組對齊,也就是說,不
C++隨筆(一)關於用int來表示一個物件指標並復原問題
開發十年,就只剩下這套架構體系了! >>>
C++ 繼承(一)
c++ 繼承(一)C++繼承的標準寫法:class BaseMonster { public: string name; string skill; uint32_t hp; void attack() { cout << "Base ::
C++ 模板(一)
c++ 模板C++模板類似與C#/Java當中的泛型,即可使用同樣的代碼實現不同的功能。效果類似於繼承(父對象指針指向子指針)。一 : 函數模板#include <iostream> using namespace std; template<typename T>//<type
Linux系統運維常見面試簡答題(一)(15題)
數據庫 route add 書寫 iptable sync 語句 日誌 mas ech 1、請描述下linux 系統的開機啟動過程開機加電BIOS自檢———–>MBR引導———–>grub引導菜單———–>加載內核———–>啟動init進程———–&
C語言(一):初始C語言
實踐 概念 個數 部分 貝爾 指令集 觸摸 物理學 解釋器 學習筆記: C的歷史和特性 編寫程序的步驟 編譯器和鏈接器的一些知識 C的標準 1.1 C語言
C++基礎(一)
C++基礎# include <iostream> # include <stdio.h> class A { public: A() :i(10) { } virtual void f() { std::cout << "A::f() i = &qu
Java 面試基礎總結(一)
tor rac 時有 線程安全 lec getclass ron 接口 add 1、九種基本數據類型的大小以及它們的封裝類 java提供的九種基本數據類型:boolean、byte(1)、char(2)、short(2)、int(4)、long(8)、float(4)、do
c#日誌(一)
隧道 變量名 自加 != 嘗試 清屏 數字 還需 遇到 使用@字符時能讓字符串不識別轉義字符關於加法運算符更多的使用;1、字符串相加 用來連接兩個字符串 返回一個字符串2、當一個字符串跟一個數字相加的話,首先把數字轉變成字符串,然後連接起來結果是字符串算數運算符前++:先自
Android TV開發總結(一)構建一個TV app前要知道的事兒
進入 line 指南 col 遠程 引導 允許 方法 imp 原文:Android TV開發總結(一)構建一個TV app前要知道的事兒 版權聲明:我已委托“維權騎士”(rightknights.com)為我的文章進行維權行動.轉載務必轉載所
Spring Boot(一) 第一個Spring Boot專案
簡介 以前我們用SSM來開發專案的時候,需要先進行開發環境的搭建,例如確定技術框架及版本,還有各框架之間的相容性問題,在經過繁瑣的配置之後,還要測試框架是否能正常執行,才能將專案給到專案成員進行開發。該方式不僅抵消,而且浪費大量的時間。Spring Boot正式為了取代這些繁瑣的工作而生的。Sp
面試經典考題(一):SQL部分
面試經典考題(一):SQL部分 (1)寫出一條Sql語句: 取出表A中第31到第40記錄(SQLServer, 以自動增長的ID作為主鍵, 注意:ID可能不是連續的。) --定義臨時表@A併為@A產生資料 declare @A table(id int i
Socket的應用(一)——建立一個簡單的回顯客戶端/伺服器
在這篇文章中,我們將利用Python的Socket模組,編寫一個簡單的本地TCPC/S應用:建立Server和Client,在開始時Server等待Client的請求過程中,Server顯示出等待資訊,之後Client連線上Server併發送訊息,最後Server則要回顯出來自客戶端的所有輸出,併發