C++STL之vector模板類詳解
前言
STL標準模板庫是C++中非常有用的功能庫。本篇從vector容器開始學(xué)習(xí)STL。
vector模板類
創(chuàng)建vector對象,遍歷元素
vector模板類在頭文件vector中,用于存儲數(shù)組,并采用動態(tài)內(nèi)存分配。
創(chuàng)建一個vector對象并初始化長度,通過[]運算符訪問元素:
#include <vector>
using namespace std;
int main(){
vector<int> vec(5); // vec length 5
vec[0] = 1;
return 1;
}
可以采用for循環(huán)遍歷vector元素,C++11提供了采用范圍for循環(huán)來遍歷STL容器:
for(int i=0; i < 5; i++) // general cout << vec[i] << '\n'; // equal to for(int i: vec) // range cout << i << '\n';
迭代器
迭代器是STL中,類似指針的類,指向容器中的某個元素。
創(chuàng)建一個正向迭代器:
vector<int>::iterator t; t = vec.begin(); *t = 1; // vec[0] = 1 t++; // vec[1]
迭代器就像一個指針,具有*、++運算符。
容器的基本方法
STL容器都提供了一些基本方法,包括:
size():返回容器中的元素數(shù)目swap():交換兩個容器的內(nèi)容begin():返回一個指向容器中第一個元素的迭代器end():返回一個指向容器末尾元素后一個元素的迭代器
此外,vector還包含一些部分容器擁有的方法:
push_back():在容器末尾添加一個元素pop_back():刪除容器末尾的元素erase():給定一個迭代器,刪除該迭代器指向的元素;給定兩個迭代器it1, it2,刪除容器內(nèi)區(qū)間[it1, it2)的元素insert():給定一個迭代器和一個元素,在該迭代器指向處插入該元素;給定三個迭代器it1, it2, it3,將容器區(qū)間[it2, it3)的元素插入到it1處。\clear():清除容器中所有元素
此外還有一些有用的方法,以后碰上再總結(jié)。
#include <cstdio>
#include <iostream>
#include <cstring>
#include <vector>
using namespace std;
int main(){
vector<int> vec(5);
vector<int> copyvec(vec);
for(int i: vec)
cout << i <<'\n';
cout <<'\n';
vector<int>::iterator t;
t = vec.begin();
*t = 1;
for(int i: vec)
cout << i <<'\n';
cout << '\n';
cout << vec.size() << endl;
cout << '\n';
vec.swap(copyvec);
for(int i: vec)
cout << i <<'\n';
cout <<'\n';
vec.insert(vec.end(), copyvec.begin(), copyvec.end());
for(int i: vec)
cout << i <<'\n';
cout <<'\n';
vec.erase(vec.begin(), (vec.begin()+5));
for(int i: vec)
cout << i <<'\n';
cout <<'\n';
vec.push_back(2);
for(int i: vec)
cout << i <<'\n';
cout <<'\n';
vec.pop_back();
for(int i: vec)
cout << i <<'\n';
cout <<'\n';
vec.clear();
std::cout << vec.size() <<endl;
cout << '\n';
return 1;
}
STL函數(shù),sort
STL通過泛型編程的思想定義了很多STL函數(shù),用于各種容器類的通用操作,如搜索,排序等。
頭文件algorithm提供了這些STL函數(shù),以sort排序為例,sort函數(shù)參數(shù)為前后兩個迭代器以及一個比較方法:template <typename Iter> void sort (Iter first, Iter last, Compare comp);比較區(qū)間為[first, last),comp表示函數(shù)指針:
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main(){
vector<int> vec;
vec.push_back(2);
vec.push_back(4);
vec.push_back(1);
for(int i: vec)
cout << i <<'\n';
cout <<'\n';
sort(vec.begin(), vec.end());
for(int i: vec)
cout << i <<'\n';
cout <<'\n';
return 1;
}
/*
2 \n 4 \n 1
1 \n 2 \n 4
*/
如果不提供比較方法,則默認使用容器元素定義的<進行比較;如果提供Compare函數(shù)指針,則根據(jù)返回的true, false進行排序,true表示Compare參數(shù)順序正確:
bool smaller(const int& a, const int& b){
if(a >= b)
return true;
return false;
}
sort(vec.begin(), vec.end(), smaller);
// 4 2 1
總結(jié)
本篇文章就到這里了,希望能夠給你帶來幫助,也希望您能夠多多關(guān)注腳本之家的更多內(nèi)容!
相關(guān)文章
C語言中g(shù)etchar()的返回類型為什么是int詳解
這篇文章主要給大家介紹了關(guān)于C語言中g(shù)etchar()的返回類型為什么是int的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2018-11-11

