c++ vector基本函數、排序、查找用法


vector用法目錄:

1、基本用法

2、vector的刪除操作

3、vector的sort排序

4、翻轉vector中的所有元素

5、find()函數的用法

6、vector實戰(這里寫的是我在最開始用vector時候犯的錯誤)


1、基本用法:

頭文件:

#include<vector>

定義vector:

整數型:    vector<int>a;
字符型:    vector<char>a;
字符串型:  vector<string>a; (注意字符串型輸入輸出用cin和cout)

固定vector的大小:
           vector<int>a(105);

在容器最后存入新元素:

for(int i=0;i<10;i++){
    b.push_back(i);
}

將字符數組中的數據賦值給容器:

1、遍歷賦值:
    char a[MAX+5];
    vector<char>vc;
    cin>>a;
    int la=strlen(a);
    for(int i=0;i<la;i++) 
        vc.push_back(a[i]);
2、定義容器時賦值:
    char a[MAX+5];
    cin>>a;
    int la=strlen(a);
    vector<char>vc(a,a+la);

判斷容器的長度:

printf("%d\n",b.size());

遍歷容器中元素:

1、遍歷輸出    
    for(int i=0;i<vc.size();i++)
        printf("%c",vc[i]);
     printf("\n");
2、錯誤示例:
    for(int i=vc.begin();i<vc.end();i++){
        cout<<vc[i]<<" ";
    }
    cout<<endl;

清空容器、判斷是否為空、刪除最后元素:

清空容器: a.clear();//清空a中的元素
判斷容器是否空:a.empty();//判斷a是否為空,空則返回ture,不空則返回false
刪除容器最后的元素:  a.pop_back(); ///括號內不可以添加index刪除指定元素

2、vector的刪除操作

  vector很好的一點就是可以實現刪除操作,用它來做模擬很好實現。

1、函數使用:
    vc.erase(vc.begin(),vc.end()); ///vc.erase()可以刪除一個或多個元素
2、說明:
    vc.erase()函數中添加的地址范圍是左閉右開區間,刪除內容后,如果后面還有元素,會自動補全空位。
3、注意:
    ///vc.erase()函數中不是直接加要刪除的內容,下面例子是錯誤的。
    vc.erase('a');          

3、vector的sort排序(加#include<algorithm>頭文件)

將元素從小到大的順序排列(默認):

int c1[]={1,3,11,2,66,22,-10};
vector<int>c(c1,c1+7); ///賦初值
sort(c.begin(),c.end());
for(int i=0;i<c.size();i++){
    printf("%d ",c[i]); 
}
printf("\n");

重寫cmp函數按要求排序:

#include<stdio.h>
#include<vector>
#include<algorithm>
using namespace std;
bool cmp(int x,int y) ///cmp函數傳參的類型不是vector<int>型,是vector中元素類型,即int型
{
    return x>y;
}
int main()
{
    int c1[]={1,3,11,2,66,22,-10};
    vector<int> c(c1,c1+7);
    sort(c.begin(),c.end(),cmp);
    for(int i=0;i<c.size();i++){
        printf("%d ",c[i]);
    }
    printf("\n");
    return 0;
}

 vector<node>(結構體)的cmp函數與其類似

4、翻轉vector中的所有元素:

int d1[]={1,3,11,2,66,22,-10};
vector<int> d(d1,d1+7);

reverse(d.begin(),d.end()); ///不是d.reverse()

for(int i=0;i<d.size();i++){
    printf("%d ",d[i]);
}
printf("\n");

5、find()函數的用法:

int temp1[]={ 1,3,2,4,5,0 };
vector<int> temp(temp1,temp1+6);

vector<int>::iterator it=find(temp.begin(),temp.end(),3);///返回的是地址

int index=&*it-&temp[0];///放入迭代器中得到容器中的位置

printf("%d\n",index);

6、vector實戰:(這里寫的是我在最開始用vector時候犯的錯誤)

  vector沒申請不能直接賦值

    vector<int>a;
    for(int i=0;i<10;i++){
        a[i]=5; ///vector[i]根本沒被申請,所以不可以直接賦值
    }
    vector<int>a;
    for(int i=0;i<10;i++){
        a.push_back(i); ///申請a[3]后,下面可以直接改變它的值
    }
    a[3]=6;
    vector<int>a(10);///先申請一個大小為10的向量后也可以直接改變a[3]的值
    a[3]=6; 

(上面只是vector的一部分內容,后續會逐漸補充,不足請評論)

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM