亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

C++STL之vector模板類詳解

 更新時(shí)間:2022年03月14日 11:18:17   作者:RuiH.AI  
這篇文章主要為大家詳細(xì)介紹了C++vector模板類,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助

前言

STL標(biāo)準(zhǔn)模板庫(kù)是C++中非常有用的功能庫(kù)。本篇從vector容器開始學(xué)習(xí)STL。

vector模板類

創(chuàng)建vector對(duì)象,遍歷元素

vector模板類在頭文件vector中,用于存儲(chǔ)數(shù)組,并采用動(dòng)態(tài)內(nèi)存分配。

創(chuàng)建一個(gè)vector對(duì)象并初始化長(zhǎng)度,通過(guò)[]運(yùn)算符訪問(wèn)元素:

#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)來(lái)遍歷STL容器:

for(int i=0; i < 5; i++) // general
	cout << vec[i] << '\n';
// equal to
for(int i: vec) // range
	cout << i << '\n';

迭代器

迭代器是STL中,類似指針的類,指向容器中的某個(gè)元素。

創(chuàng)建一個(gè)正向迭代器:

vector<int>::iterator t;
t = vec.begin();
*t = 1; // vec[0] = 1
t++; // vec[1]

迭代器就像一個(gè)指針,具有*、++運(yùn)算符。

容器的基本方法

STL容器都提供了一些基本方法,包括:

  • size():返回容器中的元素?cái)?shù)目
  • swap():交換兩個(gè)容器的內(nèi)容
  • begin():返回一個(gè)指向容器中第一個(gè)元素的迭代器
  • end():返回一個(gè)指向容器末尾元素后一個(gè)元素的迭代器

此外,vector還包含一些部分容器擁有的方法:

  • push_back():在容器末尾添加一個(gè)元素
  • pop_back():刪除容器末尾的元素
  • erase():給定一個(gè)迭代器,刪除該迭代器指向的元素;給定兩個(gè)迭代器it1, it2,刪除容器內(nèi)區(qū)間[it1, it2)的元素
  • insert():給定一個(gè)迭代器和一個(gè)元素,在該迭代器指向處插入該元素;給定三個(gè)迭代器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通過(guò)泛型編程的思想定義了很多STL函數(shù),用于各種容器類的通用操作,如搜索,排序等。

頭文件algorithm提供了這些STL函數(shù),以sort排序?yàn)槔?code>sort函數(shù)參數(shù)為前后兩個(gè)迭代器以及一個(gè)比較方法:
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
*/

如果不提供比較方法,則默認(rèn)使用容器元素定義的<進(jìn)行比較;如果提供Compare函數(shù)指針,則根據(jù)返回的true, false進(jìn)行排序,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é)

本篇文章就到這里了,希望能夠給你帶來(lái)幫助,也希望您能夠多多關(guān)注腳本之家的更多內(nèi)容!       

相關(guān)文章

最新評(píng)論