笔记:C++学习之旅---泛型算法
<iostream>
<vector>
<numeric>
namespace
std;
main()
vector
<
int
> vec;
int
i = 0;
"请输入整数"
<< endl;
while
(cin >> i)
if
(i == -1)
break
;
int
val;
"请输入你要查找的数字\n"
;
auto
result = find(vec.cbegin(), vec.cend(), val);
//查找输入的数字是否在容器中,在则显示the value x is present,否则显示the value is not present;
"The value "
<< val << (result == vec.cend() ?
" is not present\n "
:
" is present\n"
) << endl;
//
"accumulate1:"
<< accumulate(vec.cbegin(), vec.cend(), 0)<<endl;
//算出元素之和;
vector
<
double
> ivec = { 1.1, 2.2, 3.3, 4.4,5.5 };
"accumulate2:"
<< accumulate(ivec.cbegin(), ivec.cend(), 0.0)<<endl; //16.5 前面是double,一定要注意用0.0
return
0;
慎用内联
内联能提高函数的执行效率,为什么不把所有的函数都定义成内联函数?
如果所有的函数都是内联函数,还用得着“内联”这个关键字吗?
内联是以代码膨胀(复制)为代价,仅仅省去了函数调用的开销,从而提高函数的
执行效率。如果执行函数体内代码的时间,相比于函数调用的开销较大,那么效率的收
获会很少。另一方面,每一处内联函数的调用都要复制代码,将使程序的总代码量增大,
消耗更多的内存空间。以下情况不宜使用内联:
(1)如果函数体内的代码比较长,使用内联将导致内存消耗代价较高。
(2)如果函数体内出现循环,那么执行函数体内代码的时间要比函数调用的开销大。
类的构造函数和析构函数容易让人误解成使用内联更有效。要当心构造函数和析构
函数可能会隐藏一些行为,如“偷偷地”执行了基类或成员对象的构造函数和析构函数。
所以不要随便地将构造函数和析构函数的定义体放在类声明中。
一个好的编译器将会根据函数的定义体,自动地取消不值得的内联(这进一步说明
了inline 不应该出现在函数的声明中)。
<iostream>
<vector>
<string>
<algorithm>
namespace
std;
elimDups(
vector
<
string
> &
vec
)
vec
.begin(),
vec
.end());
//排序
auto
end_unique = unique(
vec
.begin(),
vec
.end());
//重排输入范围,使得每个单词只出现一次,找到重复元素;
"unique after\n"
;
for
(
auto
i = 0; i !=
vec
.size(); ++i)
vec
[i] <<
" "
;
vec
.erase(end_unique,
vec
.end());
//删除重复元素
"erase after\n"
;
for
(
auto
i = 0; i !=
vec
.size(); ++i)
vec
[i] <<
" "
;
main()
string
word;
vector
<
string
> vec;
"请输入一串单词(#结束)\n"
;
while
(cin >> word)
if
(word ==
"#"
)
break
;
return
0;
<iostream>
<string>
<vector>
<algorithm>
namespace
std;
elimpDups(vector<string> &s)
//排序;
auto
new_end = unique(s.begin(), s.end());
//找出重复元素;
//删除重复元素;
biggies(vector<string> &words, vector<string>::size_type sz,ostream &os = cout,
char
c =
' '
)
const
&lhs, string
const
&rhs){
return
lhs.size() < rhs.size();});
//按长度排序,长度相同的单词维持字典序;
auto
wc = find_if(words.begin(), words.end(), [sz](string
const
&a){
return
a.size() >= sz;});
//找到满足size >= sz的元素数目;
/*for_each(wc, words.end(),[](const string &s){
const
string &s){
//加入引用捕获;ostream &os = cout,char c = ' ';
fun1()
auto
f2 = [&v1]{
return
++v1; };
auto
j1 = f2();
//j1 = 1;
fun2()
auto
f2 = [v1]()
mutable
{
return
++v1; };
auto
j2 = f2();
//j2 = 43
main()
"1234"
,
"1234"
,
"1234"
,
"hi~"
,
"alan"
,
"alan"
,
"cp"
,
"a"
,
"abc"
};
//引用捕获
//变量捕获
return
0;
是一个可调用的表达式,其返回结果是一个能用做条件的的值。标准库算法所使用的的谓词分为两类:一元谓词(意味着它只接受单一参数)、二元谓词(意味着它们有两个参数)。
<iostream>
<vector>
<algorithm>
<string>
<functional>
namespace
std;
bool
check_size(
const
string
&
s
,
vector
<
int
>::
size_type
sz
)
return
s
.size() <
sz
;
vector
<
int
>::
const_iterator
find_first_bigger(
const
vector
<
int
> &
vec
,
const
string
&
s
)
return
find_if(
vec
.cbegin(),
vec
.cend(),
s
, placeholders::_1));
main()
vector
<
int
> vec = { 1, 2, 3, 4, 5, 6 };
string
s = {
"test"
};
//5,找到第一个比字符串“test“ 4 大的数.
return
0;
笔记:C++学习之旅---泛型算法的更多相关文章
- 【c++ Prime 学习笔记】第10章 泛型算法
标准库未给容器添加大量功能,而是提供一组独立于容器的泛型算法 算法:它们实现了一些经典算法的公共接口 泛型:它们可用于不同类型的容器和不同类型的元素 利用这些算法可实现容器基本操作很难做到的事,例如查 ...
- C++ Primer 读书笔记:第11章 泛型算法
第11章 泛型算法 1.概述 泛型算法依赖于迭代器,而不是依赖容器,需要指定作用的区间,即[开始,结束),表示的区间,如上所示 此外还需要元素是可比的,如果元素本身是不可比的,那么可以自己定义比较函数 ...
- 笔记-JavaWeb学习之旅7
JavaScript基础 概念:一门客户端脚本语言,运行在客户端浏览器中,每一个浏览器都有JavaScript的解析引擎,是一个脚本语言,不需要编译,直接就可以被浏览器解析执行. JavaScript ...
- 笔记-JavaWeb学习之旅5
CP30的演示 package cn.itcast.datasourcejdbc; import com.mchange.v2.c3p0.ComboPooledDataSource; import j ...
- 笔记-JavaWeb学习之旅19
Redis:redis是一款高性能的NOSQL系列的非关系型数据库 NOSQL: Not Only SQL ,意即"不仅仅是SQL",是一项全新的数据库理念,泛指非关系型数据库 r ...
- 笔记-JavaWeb学习之旅18
AJAX:ASynchronous JavaScript And XML 异步的JavaScript 和XML 异步和同步:客户端和服务器端相互通信的基础上 同步:客户端操作后必须等待服务器端的响应, ...
- 笔记-JavaWeb学习之旅17
1.过滤选择器 首元素选择器:first 获得选择的元素中的第一个元素 尾元素选择器:last获得选择元素中的最后一个元素 非元素选择器:not(selector) 不包括指定内容的元素 偶数选择器: ...
- 笔记-JavaWeb学习之旅16
增强对象的功能 动态代理:在内存中形成代理类 实现步骤: 代理对象和真实对象实现相同的接口 代理对象 = Proxy.newProxyInstance(); 使用代理对象调用真实对象的方法 增强方法 ...
- 笔记-JavaWeb学习之旅15
Filter:过滤器 概念:当访问服务器的资源是,过滤器可以将请求拦截下来,完成一些特殊的功能 快速入门: 步骤: 定义一个类,实现接口Filter 复写方法 配置拦截路径 package com.d ...
- 笔记-JavaWeb学习之旅14
JSTL:JavaServer Pages Tag Library JSP标准标签库 if标签 <%@ page import="java.util.ArrayList" % ...
随机推荐
- MybatisPlus 实现多表联合分页条件查询
方式一:XML 有点繁琐,不太想用 mapper接口 public interface RoomMapper extends BaseMapper<Room> { List<Room ...
- 04-Spring中的AOP编程之基于xml开发
AOP编程 AOP为Aspect Oriented Programming的缩写,意为:面向切面编程.利用AOP可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的 ...
- FastJson 反序列化漏洞原理分析
Fastjson 简介 fastjson框架:https://github.com/alibaba/fastjson fastjson-jndi:https://github.com/earayu/f ...
- 火山引擎 DataLeap:一家企业,数据体系要怎么搭建?
更多技术交流.求职机会,欢迎关注字节跳动数据平台微信公众号,回复[1]进入官方交流群 导读:经过十多年的发展,数据治理在传统行业以及新兴互联网公司都已经产生落地实践.字节跳动也在探索一种分布式的数据治 ...
- 万字血书Vue—Vue语法
模板语法 插值语法 Mustache插值采用{{ }},用于解析标签体内容,将Vue实例中的数据插入DOM中 <h1>Hello {{name}}</h1> 指令语法 指令用于 ...
- RTC月度小报6月丨编程挑战赛圆满收官;声网上市1周年回顾...
本月亮点速览 产品与技术: 声网Agora 实时音视频服务正式上线 HTC VIVE Sync App,支持非 VR 用户 「灵动课堂」发布 1.1.2 版本 「互动直播」6 月共发布两个版,最新版本 ...
- 别再傻傻分不清 AVSx H.26x MPEG-x 了
在音视频发展的历程中,编解码无疑是其最核心的功能,编解码标准的更新换代也极大促进了音视频技术的发展以及行为模式的变更.从电视到网络视频以及现在的网络直播.点播.音视频会议等等,这些变化的背后都离不开音 ...
- Prometheus Operator 与 kube-prometheus 之一-简介
简介 Prometheus Operator Prometheus Operator: 在 Kubernetes 上管理 Prometheus 集群.该项目的目的是简化和自动化基于 Prometheu ...
- 程序员必须掌握的java进制转换(全网最详细讲解)
前言 在上一篇文章中,壹哥给大家讲了Java里的各种运算符.其中在讲解位运算符时,我给大家提到了计算机中进制的概念.但是现在很多小白同学,对进制的概念还不够了解,比如二进制.八进制.十六进制都是怎么回 ...
- 前端开发工具 VS Code 安裝及使用
一.下载地址 https://code.visualstudio.com/ 下载完后,傻瓜式安装即可 关注公众号"Java程序员进阶"回复"vs"也可获取 二. ...