博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C++备忘
阅读量:5313 次
发布时间:2019-06-14

本文共 2584 字,大约阅读时间需要 8 分钟。

从《C++标准库》里面看到的一些技巧,以及自己遇到的一些技巧,备忘。

 

 

  • 从流中读取数据存入容器

              

1 copy(istream_iterator
(cin), istream_iterator
(), back_inserter(vInput));//从cin中读取string 类型的数据存入 vInput 这个vector

更多迭代器:

这里的流可以是标准输入输出流,也可以是文件流,各种流了,然后就是各种容器

  • 打印容器中的元素到流中去             

                       

1 copy(aDeque.begin(), aDeque.end(), ostream_iterator
(cout, "\n"));//向标准流中打印容器的元素
  • 数字转字符串

在C++有两种字符串流,也称为数组I/O流,一种在sstream中定义,另一种在strstream中定义。它们实现的东西基本一样。sstream 是基于std::string编写的,strstream是基于C类型字符串char*编写的

string到int的转换

1 string result=”10000”;2 int n=0;3 stream<
>n;//n等于10000

更多资料:

当然也有 atoi、itoa等一堆转换函数

以及sprintf、sscanf等一堆c语言的格式化函数

1 //伪代码2 sstream ss;3 ss << "C:\\"<< num <<".jpg";
  • Vector是动态增长的,当预先分配的内存不足的时候,会申请新的内存,这时需要移动前面所有的元素,会对性能造成很大影响(有时跑opencv的程序会崩掉)

vector.reserve()会保持一定的内存,vector的容量不会缩减(resize只会改变元素的个数),间接缩减容量的方法,两个vector交换之后,两者的容量也会交换。

  • 一些数值的极值
1 #include
2 cout << "int max:" << numeric_limits
::max() << "\t\tint mini: " << numeric_limits
::min() << endl;3 cout << "float max:" << numeric_limits
::max() << "\t\tfloat min: " << numeric_limits
::min() << endl;

//删除容器中所有为3的值

type::iterator newEnd = remove(aDeque.begin(), aDeque.end(), 3);distance(newEnd,aDeque.end())//删除元素的个数aDeque.erase(newEnd,aDeque.end())//真正删除元素

比如输入序列为:1 2 3 4 5 6 7 8
要删除 3
则remove后变为 1 2 4 5 6 7 8 8 元素的个数和end()的指向都没有变连大小都没有变(应该移除的元素被后面的元素覆盖)
erase() 后才真正将大小和end()的位置改变
总结起来就是一句话
xx.erase(remove(xx.begin(),xx.end(),xx),xx.end());
产生原因:
迭代器和容器是分开的,虽然达到了最大的灵活性,但是迭代器无法调用容器的任何方法

  • bind2nd(greater<int>(), 4)将greater<int>(x,y) 的第二个参数绑定为4 ,即相当于greater<int>(x,4)
  • bind1st绑定的是第一个参数

 

 

书中还有更加详尽的各种标准库组件的使用,可以当做手册。

 

  • C++ 11中的一些新特性

  • vs2013 已经支持tr1、tr2 
  • 利用tr2 中的一些函数实现的遍历文件夹(原本是boost的函数引入的)
1 // tr2.cpp : 定义控制台应用程序的入口点。 2 // 3  4 #include "stdafx.h" 5 #include 
6 #include
7 #include
8 using namespace std::tr2::sys; 9 using namespace std;10 11 int _tmain(int argc, _TCHAR* argv[])12 {13 path mypath = "c:\\Users";14 cout << "path_exists = " << exists(mypath) << '\n';15 cout << "is_directory = " << is_directory(mypath) << '\n';16 cout << "is_file = " << std::tr2::sys::is_empty(mypath) << '\n'; 17 directory_iterator begin_iter(mypath),end_iter;18 for (; begin_iter != end_iter; ++begin_iter){19 path filePath = begin_iter->path();20 cout << (is_directory(filePath) ? "目录" : "文件") << " " << "完整路径: " << std::tr2::sys::complete(filePath)<

 

未完待续……

转载于:https://www.cnblogs.com/pasion-forever/p/4139019.html

你可能感兴趣的文章
Spark的启动进程详解
查看>>
使用命令创建数据库和表
查看>>
机器视觉:SSD Single Shot MultiBox Detector
查看>>
201521123044 《Java程序设计》第1周学习总结
查看>>
MIT Scheme 的基本使用
查看>>
程序员的“机械同感”
查看>>
在16aspx.com上下了一个简单商品房销售系统源码,怎么修改它的默认登录名和密码...
查看>>
c++回调函数
查看>>
linux下Rtree的安装
查看>>
【Java】 剑指offer(53-2) 0到n-1中缺失的数字
查看>>
Delphi中ListView类的用法
查看>>
多米诺骨牌
查看>>
Linq 学习(1) Group & Join--网摘
查看>>
asp.net 调用前台JS调用后台,后台掉前台JS
查看>>
Attribute(特性)与AOP
查看>>
苹果手表:大方向和谷歌一样,硬件分道扬镳
查看>>
Competing Consumers Pattern (竞争消费者模式)
查看>>
Android面试收集录15 Android Bitmap压缩策略
查看>>
PHP魔术方法之__call与__callStatic方法
查看>>
ubuntu 安装后的配置
查看>>