首页 > 编程语言 >c++ vector容器总结

c++ vector容器总结

时间:2023-01-08 18:31:55浏览次数:45  
标签:容器 begin 元素 c++ v1 vector 100 c1

vector

1.动态扩展:

并不是在原空间之后续接新空间,而是找更大的内存空间,然后将原数据拷贝新空间,释放原空间。(一般会找比预料更多的空间)

c++ vector容器总结_c++

2.vector容器构造
1.构造

vector ​​<int> c1;​

通过区间方式进行构造

vector<int>c2(c1.begin(), c1.end());

n个elem的方式进行构造

vector<int>c3(10, 100); //10个100

拷贝构造

vector<int>c4(c3);

2.vector对象中元素的遍历输出:
void print(vector<int> &c)
{
for(vector<int> :: iterator it = c.begin();it != c.end();it ++)
{
cout<<*it<<" ";

}
cout<<"endl";

}
3.赋值操作

c++ vector容器总结_c++_02

等号赋值
vector<int> c1;
vector<int> c2;
c2 = c1;

//assign
vector<int> c3;
c3.assign(c1.begin(), c1.end());

//n 个elem的方式
vector<int> c4;
c4.assign(10, 100); //10个100
4.vector容量和大小

c++ vector容器总结_c++_03

容量永远大于等于元素个数

c.resize(15);//原来如果只有10个元素的话,会在末尾自动加5个 0 ;

c.resize(15, 100);//可以自己设定默认的填充值,此时会在后面补充5个100

5.vector的插入和删除

c++ vector容器总结_内存空间_04

//插入 第一个参数是迭代器
v1.insert(v1.begin(), 100); //第一个元素变成了100

//插入n个elem元素
v1.insert(v1.begin(), 5, 100); //前五个元素变成了100

//删除 参数也是迭代器
v1.erase(v1.begin()); //删除第一个元素

//区间删除
v1.erase(v1.begin(), v1.end()); //删除所有元素
//等价于:
v1.clear();
6.vector数据存取

c++ vector容器总结_动态内存_05

7.vector互换容器

c++ vector容器总结_赋值_06

v1.swap(v2);  //v1与v2内容互换

//实际用途
//巧用swap可以收缩内存空间

//当vector中元素个数非常大时,vector自动扩增的容量也会随之变大 100000 138900
//当使用resize重置元素个数时,resize并不会改变原有的容量,只会改变原有的大小 3 138900
//:
vector<int>(v).swap(v); //此时大小和容量分别为: 3 3

c++ vector容器总结_动态内存_07

8.vector预留空间

c++ vector容器总结_动态内存_08

对于大数据量的容器来说,比如100000个数据,它会使用30次动态内存的拓展,容器存数据是重新开辟一个空间~

此时的解决办法是:

在存数据之前,使用:

v.reserve(100000);  //此时仅仅使用1次动态内存的拓展

标签:容器,begin,元素,c++,v1,vector,100,c1
From: https://blog.51cto.com/u_15934229/5996752

相关文章

  • c++使用接口,通过纯虚函数实现
    #include<iostream>usingnamespacestd;classShape{protected:intwidth;intheight;stringname;public://purevirtialfunctionfori......
  • C++核心知识回顾(函数&参数、异常、动态分配)
    复习C++的核心知识函数与参数传值参数、模板函数、引用参数、常量引用参数传值参数intabc(inta,intb,intc){returna+b*c;}a、b、c是函数abc的形参,下......
  • 你可能不知道的容器镜像安全实践
    大家好,我是Edison。最近在公司搭建CI流水线,涉及到容器镜像安全的话题,形成了一个笔记,分享与你,也希望我们都能够提高对安全的重视。1时代背景近年来应用程序逐步广泛运行......
  • c++ virtual关键字学习
    virtual在类中使用如在多继承中(环状继承):classD{......};classB:publicD{......};classA:publicD{......};classC:publicB,publicA{.....};这个继承......
  • C++ - 多线程
    1.多线程传统的C++(C++11之前)中并没有引入线程这个概念,在C++11出来之前,如果我们想要在C++中实现多线程,需要借助操作系统平台提供的API,比如Linux的<pthread.h>,或者windows下......
  • 为什么 java 容器推荐使用 ExitOnOutOfMemoryError 而非 HeapDumpOnOutOfMemoryError
    前言好久没写文章了,今天之所以突然心血来潮,是因为昨天出现了这样一个情况:我们公司的某个手机APP后端的用户(customer)微服务出现内存泄露,导致OutOfMemoryError,但......
  • [Docker] 将容器打包成镜像、镜像分层机制详解
    目录commit命令创建一个容器打包镜像联合文件系统联合文件系统实践前置准备不使用联合文件系统的挂载使用联合文件系统进行挂载写时复制机制commit命令#将容器打包成......
  • [C++/Java/Py/C#/Ruby/Swift/Go/Scala/Kotlin/Rust/PHP/TS/Elixir/Dart/Racket/Erlang
    目录题解地址代码cppjavapython3C#rubyswiftgolangscalakotlinrustphptypescriptelixirdartracketerlang题解地址https://leetcode.cn/problems/counting-words-with-a-g......
  • C++初探索
    C++初探索前言C++和C的区别主要在8个方面:输入和输出引用inline函数函数默认值函数重载模板函数new和deletenamespace我仅对印象不深的地方做了总结。......
  • C++中的锁
    锁(161条消息)C++互斥对象std::mutex与std::shared_mutex;互斥锁:std::lock_guard、std::unique_lock与std::shared_lock的应用_持续学习,不断沉淀的博客-CSDN博客......