其實我原本只想對vector小結一下的……好吧,重點還是它,其他兩個由於性質相似所以大概說一下vector,array,valarray是c++提供的三個陣列模板,各自有著不同的優勢,三者均位於 命名空間std中,使用時均需要包括與之同名的標頭檔案
/*常用物件建立語法 */
vector
vt(n_elem)
;valarray
va(n_elem)
;// n_elem 整型 常量/變數 均可
vectorvt;
valarrayva;
array arr;
//na_elem 只能是常量
/*valarray 優點體現 */
#include
#include
void
test()
1.建構函式vectorv; 採用模板實現類實現,預設建構函式
vector(v.begin(), v.end()); 將v [begin().end()) 區間(前閉後開)中的元素拷貝給本身
vector(n,elem); 建構函式將n個elem拷貝給本身
vector(const vector &vec); 拷貝建構函式
2.賦值操作vector& operator=(const vector &vec); 過載等號操作符
assign(beg, end); 將 [beg, end)區間中的資料拷貝賦值給本身。
assign(n, elem); 將n個elem拷貝賦值給本身。
3. 對vector容器的容量和大小操作empty(); //判斷容器是否為空
capacity(); //容器的容量
size(); //返回容器中元素的個數
resize(int num); //重新指定容器的長度為num,若容器變長,則以預設值填充新位置。
//如果容器變短,則末尾超出容器長度的元素被刪除。
resize(int num, elem); //重新指定容器的長度為num,若容器變長,則以elem值填充新位置。
//如果容器變短,則末尾超出容器長度的元素被刪除
4.對vector容器進行插入、 刪除操作push_ back(ele); //尾部插入元素ele
pop_ back(); //刪除最後乙個元素
insert(const_ iterator pos, ele); //迭代器指向位置pos插入元素ele
insert(const_ iterator pos, int count,ele); //迭代器指向位置pos插入count個元素ele
erase(const_ iterator pos); //刪除迭代器指向的元素
erase(const_ iterator start, const_ iterator end); //刪除迭代器從start到end之間的元素
clear(); //刪除容器中所有元素
5. 對vector中的資料的訪問操作at(int idx); //返回索引idx所指的資料
operator; //返回索弓lidx所指的資料
front(); //返回容器中第乙個資料元素
back(); //返回容器中最後-個資料元素
6.vector互換容器 :實現兩個容器中元素進行互換swap(vct); 將vec與本身的元素進行互換
實際用途:收縮記憶體
7. vector預留空間功能描述:
●減少vector在動態擴充套件容量時的擴充套件次數
函式原型:
● reserve(int len); //容器預留len個元素長度,預留位置不初始化,元素不可訪問。
8.避免陣列非法索引操作at(); // 避免 a[-2] = 4; 同適用於array,類同 cin 物件成員函式 getline()
// 代價:執行時間更長……
9.遍歷
具體實現如下:
#include
#include
#include
//標準演算法標頭檔案
using
namespace std;
void
print
(vector<
int>
& v1)
/*擴容 */
void
test8()
} cout << num << endl;
// 未用reserve時要擴充15次,會導致效能降低,用reserve後只進行了兩次
}/*容量與大小 */
void
test7()
/*swap */
void
test6()
void
test5()
/*插入與刪除 */
void
test4()
/*容量、大小 */
void
test3()
}void
test1()
/*賦值 */
void
test2()
/*遍歷 */
void
func
(int a)
void
test01()
//第二種遍歷方式
for(vector<
int>
::iterator it = b.
begin()
;it != b.
end(
);it++
)//第三種遍歷方式 利用stl中提供的演算法(注意包含algorithm標頭檔案)
for_each
(b.begin()
,b.end()
,func)
;}
附:迭代器介紹:#include
using
namespace std;
#include
void
test()
v.push_back
(v1)
; v.
push_back
(v2)
; v.
push_back
(v3)
; v.
push_back
(v4)
; v.
push_back
(v5)
; v.
push_back
(v6)
;for
(vector< vector<
int>
>
::iterator it = v.
begin()
; it != v.
end(
); it++)
cout << endl;}}
intmain()
vector操作小結
前面了解了一下vector,現在我們來看看vector的相關操作。int main vectorv5 vectorv6 3 只提供數量而略去初始值,int 0,string 空串 vector iterator it push back向vector物件中新增元素 for int i 0 i 10 ...
C 中Vector相關知識小結
疫情所迫,希望用這種方法督促自己堅持學習。同時記錄在找工作過程中的艱辛不易。部落格內容持續增減修改,都為摘錄和個人理解。歡迎各位批評指正其中錯誤,相互勉勵,共同進步。標準庫型別vector表示某一類物件的集。合因此也被叫做容器 container 標頭檔案定義方法 include using std...
vector的空間相關操作
當我們向vector中新增元素時,如果vector空間大小不足,則會以原大小的兩倍另外配置一塊較大的新空間,然後將原空間的內容拷貝過來,在新空間的內容末尾新增元素,並釋放原空間。vector的空間動態增加大小,並不是在原空間之後的相鄰位址增加新空間,因為vector的空間是線性連續分配的,並不能原空...