自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(52)
  • 收藏
  • 关注

转载 vector内存释放机制

vector   中的内建有内存管理,当   vector   离开它的生存期的时候,它的析构函数会把   vector   中的元素销毁,并释放它们所占用的空间,所以用   vector   一般不用显式释放   ——   不过,如果你   vector   中存放的是指针,那么当   vector   销毁时,那些指针指向的对象不会被销毁,那些内存不会被释放。 vector的工作原理是系统预先...

2018-06-21 23:32:33 549

转载 关于vector大小(size)和容量(capacity)总结

操作大小的函数        在Vector容器中有以下几个关于大小的函数方法效果size()返回容器的大小empty()判断容器是否为空max_size()返回容器最大的可以存储的元素capacity()返回容器当前能够容纳的元素数量例子一:      该例子主要展示了关于大小操作函数的使用与区别[cpp] view plain copyint _tmain(int argc, _TCHAR* ...

2018-06-21 11:17:25 85705

原创 C++vector容器大小增长规律的总结

问:“vector大小是如何增长的?” 答:“自动增长的” 问:“增长规律是?” 答: 。。。。。。那么, 今天就来探究一下vector容器的大小增长规律:vector中得到大小的的函数有以下几个方法作用size()返回容器的大小empty()判断容器是否为空max_size()返回容器最大的可以存储的元素capacity()返回容器当前能够容纳的元素数量测试用代码:#include <io...

2018-06-21 11:03:22 1147

转载 关于c++ vector capacity、max_size、size、sizeof的区别

capacity,如果不重新分配内存,当前已经分配的可以容纳的元素的个数.max_size最大的可能的元素个数.size是当前元素个数sizeof是vector本身的大小(sizeof(vector<int>))size()告诉你容器中有多少元素。它没有告诉你容器为它容纳的元素分配了多少内存。capacity()告诉你容器在它已经分配的内存中可以容纳多少元素。那是容器在那块内存中总共可...

2018-06-21 11:01:14 1660

翻译 STL vector中的max_size方法

原文地址:http://www.cplusplus.com/reference/vector/vector/max_size/public member function<vector>std::vector::max_sizeC++98C++11size_type max_size() const noexcept;Return maximum sizeReturns the max...

2018-06-21 10:58:54 2333

原创 vector resize和reverse区别

reserve是容器预留空间,但并不真正创建元素对象,在创建对象之前,不能引用容器内的元素,因此当加入新的元素时,需要用push_back()/insert()函数。resize是改变容器的大小,并且创建对象,因此,调用这个函数之后,就可以引用容器内的对象了,因此当加入新的元素时,用operator[]操作符,或者用迭代器来引用元素对象。再者,两个函数的形式是有区别的,reserve函数之后一个参...

2018-06-21 10:29:59 814 1

原创 如何使用vector的reserve和resize方法

reserve和resize是vector里两个很重要的方法,有效地使用这两个方法可以减少reallocate memory的次数,提高程序的性能,所以还是有必要去研究一下的,先来看一段简单的代码吧。stdafx.h[html] view plain copy// stdafx.h : include file for standard system include files,  // or p...

2018-06-21 10:28:28 666

原创 vector.resize 与 vector.reserve的区别

std::vector的reserve和resize的区别1. reserve: 分配空间,更改capacity但不改变size2. resize: 分配空间,更改capacity也改变size如果知道vector的大小,resize一下可以当数组来用,不会分配多余的内存。 reserve是容器预留空间,但并不真正创建元素对象,在创建对象之前,不能引用容器内的元素,因此当加入新的元素时,需要用pu...

2018-06-21 10:26:31 188

转载 C++:vector中的resize()函数 VS reserve()函数

http://www.cplusplus.com/reference/vector/vector/vector/写代码的时候无意错用了这两个函数 导致测试的时候,程序运行崩溃 发现这两个函数还是有区别的void reserve (size_type n);reserver函数用来给vector预分配存储区大小,即capacity的值 ,但是没有给这段内存进行初始化。reserve 的参数n是推荐预...

2018-06-21 10:25:28 261

转载 vector容器 begin()与end()函数、front()与back()的用法

向量容器(vector)是一种顺序容器,是一块连续分配的内存,支持随机访问,从数据安排的角度看,和数组极其相似,数组跟vector的区别在于:数组是静态分配空间,一旦分配了空间的大小,就不可以再改变了,例如,int a[6];而vector是动态分配内存,随着元素的不断插入,它会按照自身的一套机制不断扩充自身的容量,vector容器的容量增长是按照容器现在容量的一倍进行增长。begin函数:函数原...

2018-06-20 17:53:42 657

转载 C++序列容器之 vector常见用法总结

C++序列容器之 vector常见用法总结一、关于vector    本文默认读者具有一定的c++基础,故大致叙述,但保证代码正确。    vector是一个动态的序列容器,相当于一个size可变的数组。    相比于数组,vector会消耗更多的内存以有效的动态增长。而相比于其他动态序列容器(deques, lists and forward_lists),vector能更快的索引元素(就像数组...

2018-06-20 17:51:32 211

原创 vector中insert()的用法详解

insert() 函数有以下三种用法: 1、在指定位置loc前插入值为val的元素,返回指向这个元素的迭代器2、在指定位置loc前插入num个值为val的元素 3、在指定位置loc前插入区间[start, end)的所有元素 举例: [cpp] view plain copy//创建一个vector,置入字母表的前十个字符   vector <char> Avector;   for(...

2018-06-20 17:50:26 2478

原创 C++ search和search_n

#include <iostream>  #include <algorithm>  #include <array>  #include <vector>  #include <functional>    using namespace std;    int main(){            array<int,8>...

2018-06-20 12:01:19 5185

原创 C++的STL之search()与find_end()

1、search()search(ideq.begin(),ideq.end(), ilist.begin(), ilist.end());2、find_end()find_end(ideq.begin(), ideq.end(),ilist.begin(),ilist.end());也可以用谓词:bool checkEven(int elem, bool even){if(even)return...

2018-06-20 11:30:33 975

原创 C++ STL算法系列5---equal() , mismatch()

equal和mismatch算法的功能是比较容器中的两个区间内的元素。这两个算法各有3个参数first1,last1和first2.如果对 于区间[first1,last1)内所有的first1+i,first1+i和first2所在位置处的元素都相等,则equal算法返回真,否则返 回假。mismatch算法的返回值是由两个迭代器first1+i和first2+i组成的一个pair,表示第1对不...

2018-06-19 10:29:48 199

转载 简单的程序诠释C++ STL算法系列

https://blog.csdn.net/jerryjbiao/article/category/870957/1

2018-06-18 21:20:22 196

转载 copy、copy_backward和copy_if的区别

copy,copy_backward和copy_if是几种常用的泛型算法,这三个函数包含在头文件#include<algorithm>中,下面县给出三种函数的原型,再说明三者的区别。       函数原型        copy(b,e,b1),其中b,e,b1都表示迭代器类型;        copy_backward(b,e,b1),其中b,e,b1都表示迭代器;        c...

2018-06-18 18:26:25 452

原创 begin( )和cbegin( )异同

1.iterator,const_iterator作用:遍历容器内的元素,并访问这些元素的值。iterator可以改元素值,但const_iterator不可改。跟C的指针有点像。 2.const_iterator 对象可以用于const vector 或非 const vector,它自身的值可以改(可以指向其他元素),但不能改写其指向的元素值。 3.cbegin()和cend()是C++11新...

2018-06-18 16:19:22 1057

转载 C++/C++11中std::transform的使用

std::transform函数是将某操作应用于指定范围的每个元素。要使用std::transform函数需要包含<algorithm>头文件。 以下是对std::transform的解释:[cpp] view plain copy/* // reference: http://en.cppreference.com/w/cpp/algorithm/transform  templat...

2018-06-18 14:00:10 10634

原创 C++标准库---transform()

transform算法transform()提供以下两种能力:1.第一形式有4个参数,把源区间的元素转换到目标区间。也就是说,复制和修改元素一气呵成;2.第二形式有5个参数,将前两个源序列中的元素合并,并将结果写入目标区间。注意:含有修改元素,仅仅只做复制元素,可以使用copy()。第一种形式transform(sourceBeg,sourceEnd,destBeg,op)(1)针对源区间[sou...

2018-06-18 13:58:52 512

转载 std bind 原理简单图解(清晰简明)

本文解释了bind 是如何工作的。为了清晰,我对图中的语法作了一些简化(例如,省略函数调用操作符的参数类型),并且简化了 bind 的实现.bind 可以用来将用户提供的需要一个参数的函数转换成不需要参数的函数对象。绑定的值(在这个例子中是123)存储在函数对象内并且会被自动传递给用户指定的函数:参数绑定也可以用于将类成员函数转换成零参数的函数对象。猿类们都知道,非静态成员函数需要一个隐式的 th...

2018-06-17 10:41:14 4713

原创 C/C++ 函数指针使用总结

一 函数指针介绍  函数指针指向某种特定类型,函数的类型由其参数及返回类型共同决定,与函数名无关。举例如下:int add(int nLeft,int nRight);//函数定义   该函数类型为int(int,int),要想声明一个指向该类函数的指针,只需用指针替换函数名即可:int (*pf)(int,int);//未初始化    则pf可指向int(int,int)类型的函数。pf前面有*...

2018-06-16 19:59:41 127

转载 std::bind与std::function详解

std::bind1、定义bind(F f, T1 t1, T2 t2, ..., TN tN);具体为:bind(&要调用的函数,&对象, 要调用函数的参数1,要调用函数的参数2...,_1(bind函数的参数1),_2(bind函数的参数2)...)注:如果bind的是一个非静态成员函数,第二个参数一定是一个该成员的一个指针,后面才是正常的参数。2、bind使用形式(1)bin...

2018-06-16 10:17:10 341

转载 C++11 中std::function和std::bind的用法

关于std::function 的用法: 其实就可以理解成函数指针 1. 保存自由函数void printA(int a){ cout<<a<<endl;}std::function<void(int a)> func;func = printA;func(2);12345678保存lambda表达式std::function<void...

2018-06-16 10:15:50 202

原创 C++11新特性之std::function & std::bind

std::function 在c++98&03时我们通常使用回调函数来处理一些需要某种场景下才触发的回调操作,但回调函数有一个限制就是它只能赋值给同类型的全局或者静态函数,对于其他有相同的返回值和相同类型参数的成员函数不能赋值。[cpp] view plain copy#include <iostream>  using namespace std;    //define a...

2018-06-16 10:14:26 208

原创 C++中的左值与右值

C++中的左值与右值一. constexpr和常量表达式  常量表达式(const expression)是指值不会改变并且在编译过程就能得到计算结果的表达式。显然,字面值属于常量表达式,用常量表达式初始化的const对象也是常量表达式。  一个对象(或表达式)是不是常量表达式由它的数据类型和初始值共同决定,例如: const int max_files = 20;       // max_fi...

2018-06-11 15:51:17 338

原创 C++中的移动构造函数及move语句示例详解

这篇文章主要给大家介绍了关于C++中移动构造函数及move语句的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用C++具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧。前言本文主要给大家介绍了关于C++中移动构造函数及move语句的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧。首先看一个小例子:#include <iostream&gt...

2018-06-11 15:29:12 1342 1

原创 C++11 左值、右值、右值引用详解

左值、右值在C++11中所有的值必属于左值、右值两者之一,右值又可以细分为纯右值、将亡值。在C++11中可以取地址的、有名字的就是左值,反之,不能取地址的、没有名字的就是右值(将亡值或纯右值)。举个例子,int a = b+c, a 就是左值,其有变量名为a,通过&a可以获取该变量的地址;表达式b+c、函数int func()的返回值是右值,在其被赋值给某一变量前,我们不能通过变量名找到它...

2018-06-11 15:14:49 123

转载 拷贝构造函数和移动构造函数

C++11之前,对象的拷贝控制由三个函数决定:拷贝构造函数(Copy Constructor)、拷贝赋值运算符(CopyAssignment operator)和析构函数(Destructor)。C++11之后,新增加了两个函数:移动构造函数(Move Constructor)和移动赋值运算符(Move Assignment opera)。我猜即使是经常用C++编程的同学也不一定听说过后两者。其实...

2018-06-11 15:08:54 3328

原创 *p++、(*p)++、*++p、++*p 的区别

*p++、(*p)++、*++p、++*p 的区别int a[5]={1,2,3,4,5};int *p = a;*p++ 先取指针p指向的值(数组第一个元素1),再将指针p自增1; cout << *p++; // 结果为 1 cout <<(*p++); // 1(*p)++ 先去指针p指向的值(数组第一个元素1),再将该值自增1(数组第...

2018-06-11 11:36:43 349 1

转载 C++ POD类型

POD,全称plain old data,plain代表它是一个普通类型,old代表它可以与c兼容,可以使用比如memcpy()这类c中最原始函数进行操作。C++11中把POD分为了两个基本概念的集合,即:平凡的(trival)和标准布局的(standard layout)。首先是平凡的(trival)定义,通常一个平凡的类或者结构体需要满足以下定义:拥有平凡的默认构造函数和析构函数。默认的意思就...

2018-06-11 11:09:56 461

转载 C++11:POD数据类型

啥是POD类型?POD全称Plain Old Data。通俗的讲,一个类或结构体通过二进制拷贝后还能保持其数据不变,那么它就是一个POD类型。平凡的定义1.有平凡的构造函数2.有平凡的拷贝构造函数3.有平凡的移动构造函数4.有平凡的拷贝赋值运算符5.有平凡的移动赋值运算符6.有平凡的析构函数7.不能包含虚函数8.不能包含虚基类[cpp] view plain copy#include "stdaf...

2018-06-11 11:04:19 209

原创 C++之POD数据类型

关于什么是POD数据类型,网上相关的博文很多,我们知道,POD数据类型主要用来解决C++与C之间数据类型的兼容性,以实现C++程序与C函数的交互。当我们想要在不同进程间传递数据时,也会考虑所使用的数据类型是不是POD的。但是不是在以上情况时,只能使用POD数据类型?肯定不是的,这些才是我想讨论的主要内容。POD数据类型C++11中把POD分为了两个基本概念的集合,即:平凡的(trival)和标准布...

2018-06-11 10:54:44 217

原创 如何避免被C++默认拷贝构造函数忽悠?

一、背景介绍          因为工作关系,需要用到C++编程。对于我来说,虽然一直从事的是linux平台下的嵌入式软件开发,但深入用到C++的特性的地方并不多。对于C++,用得最多的无非是指针、封装、继承、组合以及虚函数。对于复制构造函数、重载操作符、智能指针等概念,虽然也时有接触,但真正自己写代码需要用到的时候,并不多。          本文尝试对复制构造函数的定义、作用及需要注意的地方做...

2018-06-09 18:17:19 1327

原创 C++中字面值常量和字面值类型

 一个形如42的值被称为字面值常量。字面值常量的形式和值决定了常量的类型。例如0x42是16进制表示的整型常量。‘a'是char型字面值。字面值常量顾名思义由字面意思表示,是常量。字面值常量在程序中是直接表示的,整型直接写出大小,字符直接写出字符。一个字面值常量在编译时被直接解析为立即数,编译器内部维护字面值常量的类型。       常量表达式是指在编译和执行过程中,该表达式的值不会改变,且编译过...

2018-06-08 23:04:00 547 1

转载 Cpp:基本内置类型&字面值常量

一、基本内置类型C++定义的几种基本的算术类型:int,char,float和bool。以及特殊的void类型,void类型没有对应的值,通常用作无返回值函数的返回类型。|类型 | 含义 | 最小存储空间(位)||:---- |:-- -----|:-------------||bool | 布尔型 | - ||char | 字符型 | 8||wchar_t |...

2018-06-08 21:58:35 1067

原创 C++ constexpr类型说明符

关键字 constexpr 于 C++11 中引入并于 C++14 中得到改善。它表示常数表达式。与 const 相同,它可应用于变量,因此如果任何代码试图修改该值,均将引发编译器错误。与 const 不同,constexpr 也可应用于函数和类构造函数。 constexpr 指示值或返回值是常数,并且如果可能,将在编译时计算值或返回值。1 constexpr 变量const 和 constexp...

2018-06-08 17:57:04 977

转载 C++中的const和constexpr

C++中的const可用于修饰变量、函数,且在不同的地方有着不同的含义,现总结如下。const的语义C++中的const的目的是通过编译器来保证对象的常量性,强制编译器将所有可能违背const对象的常量性的操作都视为error。对象的常量性可以分为两种:物理常量性(即每个bit都不可改变)和逻辑常量性(即对象的表现保持不变)。C++中采用的是物理常量性,例如下面的例子:1234567struct ...

2018-06-08 17:55:09 196

原创 c++11新特性----constexpr (编译时常量)

常量表达式的值需要在编译时确定。只有字面值类型(Literal type)能被定义为constexpr。尽管指针和引用能把定义成constexpr,但他们的初始化值要求很严。一个constexpr指针的初始值必须是nullptr/0或者是存储于某个固定地址中的对象。函数体内定义的变量,一般来说没有固定地址,所以constexpr指针不能指向这样的变量。相反,所有定义在函数体之外的对象,地址都是固定...

2018-06-08 11:06:50 880

原创 constexpr和常量表达式

一、含义1、常量表达式:指值不会改变并且在编译过程就能得到计算结果的表达式。 如:const int max_files = 20; //max_files是常量表达式const int limit = max_files + 1; //limit是常量表达式int staff_size = 27; //staff_size不是常量...

2018-06-08 10:50:24 156

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除