C++学习纪录
个人的C++学习纪录
奇怪的苏苏苏
BUPTer
展开
-
【C++学习纪录】常用查找算法
一、概述find //查找元素find_if //按条件查找元素adjacent_find //查找相邻重复元素binary_search //二分查找count //统计元素个数count_if //按条件统计元素个数二、find ( iterator beg, iterator end, value)// 按值查找元素,找到即返回指定位置迭代器,找不到返回end()// beg开始迭代器, end结束迭代器, value是待查找元素#include<iostream>原创 2020-08-01 07:17:04 · 136 阅读 · 0 评论 -
【C++学习纪录】常用遍历算法
一、算法概述算法头文件主要是由< algorithm> < functional> < numeric>组成< functional> 定义了一些模板类,用以声明函数对象< numeric>体积很小,只包括几个序列上面进行简单数学运算的模板函数< algorithm>是所有STL头文件中最大的一个,范围涉及到比较、交换、查找、遍历操作、复制、修改等。二、常用遍历算法1、for_each ( iterator beg, i原创 2020-08-01 06:15:20 · 154 阅读 · 0 评论 -
【C++学习纪录】内建函数对象——逻辑仿函数
template< class T> bool logical_and< T> //逻辑与template< class T> bool logical_or< T> //逻辑或template< class T> bool logical_note< T> //逻辑非#include<iostream>#include<functional>#include<vector>#incl.原创 2020-07-31 15:42:55 · 174 阅读 · 0 评论 -
【C++学习纪录】内建函数对象——关系仿函数
函数原型:template< class T> bool equal_to< T> //等于template< class T> bool not_equal< T> //不等于template< class T> bool greater< T> //大于template< class T> bool greater_equal< T> //大于等于template< class T>原创 2020-07-31 15:31:21 · 133 阅读 · 0 评论 -
【C++学习纪录】内建函数对象——算术仿函数
在使用内建对象之前,需要引入头文件#include< functional>算术仿函数的原型有:template原创 2020-07-31 15:04:41 · 316 阅读 · 0 评论 -
【C++学习纪录】map容器基础
map/multimap容器中所有的元素都是pair,即对组。pair中的第一个值为key值,第二个值为value实值。所有元素都会根据key值进行默认的升序排序。map容器的优点在于可以根据key值快速地找到value值。在map容器中,不允许有重复的key值;而在multimap中是允许的。一、基本语法#include<iostream>#include<map>using namespace std;int main(){ //第一种常用构造方法原创 2020-07-30 23:25:12 · 161 阅读 · 0 评论 -
【C++学习纪录】set容器——使用仿函数改变排序
set容器默认是以升序方式对数据进行排序。若要改变它的排序方式,应在创建容器变量时使用仿函数。一、简单地对数据进行降序排序#include<iostream>#include<set>using namespace std;//写仿函数,重载括号运算符,放在类中。class temp{ public: //注意,是bool类型 bool operator()(const int num1, const int num2) {原创 2020-07-30 20:54:22 · 1358 阅读 · 6 评论 -
【C++学习纪录】set容器——基本概念 & 插入函数 & 计数函数
一、set容器和multiset容器都会在数据插入时对数据进行排序,底层是二叉树结构。使用二者前需include同一个头文件< set >二、set容器不允许重复的数据出现,而multiset容器允许。三、向set容器和multiset容器中插入数据使用的是类的成员函数insert()其中,两种容器insert函数返回值不相同。#include<iostream>#include<set>using namespace std;int main(){原创 2020-07-30 20:27:48 · 891 阅读 · 0 评论 -
【C++学习纪录】pair对组的创建
在出现成对出现的数据时,可以利用pair对组实现两个数据的返回。两种创建方式:一、 pair<type, type> p (value, value)二、pair<type, type> p = make_pair(value, value)#include<iostream>#include<string>using namespace std;int main(){ //方法一 pair<int, string>原创 2020-07-30 19:57:08 · 190 阅读 · 0 评论 -
【C++学习纪录】list容器——迭代器 & 反转 & 排序
一、list容器的迭代器1、list容器的迭代器是不支持随机访问的。它是双向迭代器。2、这意味着:假设p1、p2是list迭代器,p1++、++p1、p1–、--p1、p1 == p2这样的操作是合法的,而p1 += num不合法。3、若p是一个list容器,通过p[num]的方式访问数据是不合法的。二、reverse( ) 反转函数#include<iostream>#include<list>using namespace std;void printList(原创 2020-07-30 16:12:36 · 604 阅读 · 0 评论 -
【C++学习纪录】vector函数——预留空间
可使用reserve(int len)函数为容器预留len个元素长度,这样做可减少vector在动态扩展容量时的扩展次数。预留位置不初始化,元素不可访问。#include<iostream>using namespace std;#include<vector>int main(){ vector<int> v; v.reserve(10); cout << "capacity: " << v.capacity原创 2020-07-28 20:24:06 · 295 阅读 · 0 评论 -
【C++学习纪录】vector容器——利用swap函数缩小空间
容器互换函数swap(vec)用于实现两个容器内的元素进行互换一、普通用法#include<iostream>using namespace std;#include<vector>void printVector(vector<int> &v) { for (vector<int>::iterator it = v.begin(); it != v.end(); it++) { cout <<原创 2020-07-28 20:18:47 · 338 阅读 · 0 评论 -
【C++学习纪录】vector容器——数据的存取
1、at(int index) 返回索引index所指的数据2、operator[ ] 返回索引index所指的数据3、front() 返回容器中第一个数据元素4、back() 返回容器中最后一个数据元素#include<iostream>using namespace std;#include<vector>void printVector(vector<int> &v) { for (vector<int>::iterat原创 2020-07-28 19:50:21 · 604 阅读 · 0 评论 -
【C++学习纪录】vector容器——插入和删除
1、push_back(elem) 尾部插入元素elem2、pop_back() 删除最后一个元素3、insert(const_iterator pos, elem) 向迭代器指向的位置插入elem4、insert(const_iterator pos, int count, elem) 向迭代器指向位置插入count个elem5、erase(const_iterator pos) 删除迭代器指向的元素6、erase(const_iterator start, const_iterator end原创 2020-07-28 18:24:48 · 298 阅读 · 0 评论 -
【C++学习纪录】vector容器——容量与大小
1、empty() 判断容器是否为空。为空返回真,不为空返回假。2、capacity() 返回容器的容量3、size() 返回容器中元素的个数。元素个数不一定等于容器容量。4、resize(int num) 重新指定容器的长度为num。若容器变长,以默认值0填充新位置。如果容器变短,则末尾超出容器长度的元素被删除。5、resize(int num, elem) 重新指定容器的长度为num。若容器变长,以elem值填充新位置。如果容器变短,则末尾超出容器长度的元素被删除。...原创 2020-07-28 18:03:39 · 732 阅读 · 0 评论 -
【C++学习纪录】vector容器——构造函数&赋值操作
1、vector v; 采用模板类实现,无参构造2、vector(v.begin(), v.end()); 将v[begin(), end())区间的元素拷贝3、vector(n, elem) 将n个elem拷贝给本身4、vector(const vector &vec) 拷贝构造函数#include<iostream>using namespace std;#include<vector>void printVector(vector<int> &原创 2020-07-28 15:25:03 · 288 阅读 · 0 评论 -
【C++学习纪录】string容器——截取子串
函数原型:string substr(int pos, int n) const 返回由pos开始的n个字符组成的字符串一、简单截取#include<iostream>using namespace std;#include<string>int main(){ string str("hello world"); string temp = str.substr(6, 5); cout << temp << endl;原创 2020-07-28 14:57:19 · 4461 阅读 · 0 评论 -
【C++学习纪录】string容器——插入和删除
1、string &insert(int pos, const char *s) 插入字符串2、string &insert(int pos, const string &str) 插入字符串3、string &insert(int pos, int n, char c) 在指定位置插入n个字符c4、string &erase(int pos, int n) 删除从pos开始的n个字符一、插入字符串#include<iostream>using原创 2020-07-28 14:44:16 · 227 阅读 · 0 评论 -
【C++学习纪录】string容器——字符存取与修改
在string容器中,字符存取和修改有两种方法:1、char &operator[ ] (int n) 通过[ ]方式取字符2、char &at(int n) 通过at函数获取字符一、获取字符:#include<iostream>using namespace std;#include<string>int main(){ string str("hello world"); //第一种方式 cout << str[原创 2020-07-28 14:28:24 · 172 阅读 · 0 评论 -
【C++学习纪录】string容器——字符串比较
1、int compare(const string &s) const 与字符串s作比较2、int compare(const char *s) const 与字符串s作比较一、当两个字符串相等时,输出0.#include<iostream>using namespace std;#include<string>int main(){ string str1("hello world"); string str2("hello world");原创 2020-07-28 14:16:36 · 173 阅读 · 0 评论 -
【C++学习纪录】string容器——替换
string& replace(int pos, int n, const string &str) 替换从pos开始的n个字符为strstring& repalce(int pos, int n, char *s) 替换从pos开始的n个字符为字符串s一、string& replace(int pos, int n, const string &str) 替换从pos开始的n个字符为str#include<iostream>#include&.原创 2020-07-27 23:02:05 · 120 阅读 · 0 评论 -
【C++学习纪录】string容器——查找
1、int find(const string &str, int pos = 0) const 查找str第一次出现位置,从pos开始查找2、int find(const char *s, int pos = 0) const 查找s第一次出现位置,从pos开始查找3、int find(const char *s, int pos, int n) const 从pos位置查找s的前n个字符第一次位置4、int find(const char c, int pos = 0) const 从po原创 2020-07-27 21:34:28 · 264 阅读 · 0 评论 -
【C++学习纪录】string容器——字符串的拼接
string字符串的拼接1、string &operator+=(const char *str) 重载+=操作符2、string &operator+=(const char c) 重载+=操作符3、string &operator+=(const string &str) 重载+=操作符4、string &append(const char *s) 把字符串s连接到当前字符串末尾5、string &append(const char *s, in原创 2020-07-27 21:06:33 · 819 阅读 · 0 评论 -
【C++学习纪录】string容器——赋值操作
string赋值操作1、string& operator=(const char* s) char类型字符串赋值给当前字符串2、string& operator=(const string& s) string类型字符串赋值给当前字符串3、string& operator=(char c) 把一个字符c赋值给当前字符串4、string& assign(const char s) char类型字符串赋值给当前字符串5、string& assign(co原创 2020-07-27 20:30:39 · 496 阅读 · 0 评论 -
【C++学习纪录】string容器——简单的构造函数
简单介绍四种string构造函数:1、string() 创建一个空的字符串2、string(const char* s) 使用字符串s初始化3、string(const string& str) 使用一个string对象初始化另一个string对象4、string(int n, char c) 使用n个字符c初始化一、string() 创建一个空的字符串略二、string(const char* s) 使用字符串s初始化#include<iostream>using n原创 2020-07-27 20:10:12 · 158 阅读 · 0 评论 -
【C++学习纪录】vector容器——容器中嵌套容器
//vector容器中嵌套容器#include<iostream>using namespace std;#include<vector>int main(){ //创建vector容器 vector<vector<int>> temp; vector<int> temp1; vector<int> temp2; vector<int> temp3; //向vecto原创 2020-07-27 19:51:33 · 896 阅读 · 1 评论 -
【C++学习纪录】二进制方式读文件、写文件
#include<iostream>#include<string>#include<fstream>using namespace std;class person{ public: string name; int years;};int main(){ //二进制写文件 fstream ofs("test.txt", ios::out | ios::binary); if(!ofs.is_原创 2020-07-27 19:51:40 · 94 阅读 · 0 评论 -
【C++学习纪录】读文件的四种方式
#include<iostream>using namespace std;#include<string>#include<fstream>int main(){ fstream ifs; ifs.open("text.txt", ios::in); //判断文件是否打开成功 if(!ifs.is_open()) { cout << "Failed!" << endl;原创 2020-07-27 19:51:47 · 184 阅读 · 0 评论 -
【C++学习纪录】构造函数中的深拷贝与浅拷贝的问题
在C++中创建一个类时,默认情况下,编译器会自动调用构造函数和析构函数。其中,构造函数包括默认构造函数(无参)、有参构造函数和拷贝构造函数。在调用拷贝构造函数时,可能会遇到深拷贝与浅拷贝问题。拷贝构造函数默认为浅拷贝,即仅仅将传入的对象的内容简单地复制到新创建的对象上。因此,浅拷贝的问题在于:如果我们在写类时将一块内存开辟在堆区,并在析构函数中写了程序运行结束后即释放它的代码,浅拷贝时就可能会有多个对象中的指针变量指向同一片区域。而每一个对象在函数运行结束后都会被析构函数所清除,此时因为每次调用析构函数原创 2020-07-12 20:19:58 · 188 阅读 · 0 评论