C++ STL标准库-Vector容器

vector切片构造

int func(int var)
{
    printf("%d",var);
    return 1;
}
int main()
{
    int array[]= {1,2,3,4,5};
    vector<int> a;
    a.push_back(1);
    a.push_back(2);
    a.push_back(3);
    vector<int> b=vector<int>(a.begin(),a.begin()+2);
   
    for_each(b.begin(),b.end(),func);
    return1;
}

a.begin()+2指向第一个元素的下一个位置,即左闭右开,a.begin()+(n+1),n为目标索引。

vector重复元素批量构造:

    vector<int> c(5,1);
    for_each(c.begin(),c.end(),func);
vector<int> c=vector<int>(重复次数,元素值);

vector赋值

operation=、assign函数

assign可以截取区间给vector。c.assign(b.begin(),b.begin()+2);

也可用于赋值重复元素给vector

vector插入和删除

push_back   尾部插入

poo_back 尾部删除

insert 给定一个迭代器指针,插入这个迭代器指针位置上

erase 同理

clear 清空全部

emplace_back性能优势

emplace_back只调用构造函数,没有移动构造函数,也没有拷贝构造函数。单纯这么看的话,速度是比push_back高的。

swap交换容器

将传入的容器与本身容器互换。

收缩空间

vec.shrink_to_fit()  让容器的空间自动适应容器的大小。

预留空间

reserve(int len) 减少vector在动态扩展容量时的扩展操作的次数

遍历与排序

int func(int var)
{
    printf("%d ",var);
    return 1;
}
int compare(int var1,int var2)
{
    return var1>var2;
}
int main()
{
    int array[]= {1,2,3,4,5};
    vector<int> a;
    a.push_back(1);
    a.push_back(2);
    a.push_back(3);
    sort(a.begin(),a.end(),compare);
    for_each(a.begin(),a.end(),func);
}

sort(a.begin(),a.end(),compare);为sort算法提供一个比较器,结果返回1表示符合排序规则,返回0表示需要调整位置。

vector扩容机制

c++vector与c# java 列表扩容有些许不同。

在C++ stl中vector默认的初始容量为0或当你指定为0时,它在之后的push不会进行预扩容。

只有当你在构造结构体时指定初始容量大于0时,每次push后容器如果填满则会进行2倍的扩容。

作者:Miracle
来源:麦瑞克博客
链接:https://www.unitymake.com/archives/programming-life/cpp/3673
本博客所有文章除特别声明外,均采用CC BY-NC-SA 4.0许可协议,转载请注明!
THE END
分享
打赏
海报
C++ STL标准库-Vector容器
vector切片构造 int func(int var) {     printf("%d",var);     return 1; } int main() {     int array[]= {1,2,3,4,5};     vector<int> a;……
<<上一篇
下一篇>>
文章目录
关闭
目 录