
C++
seineo
CS路上不停歇
展开
-
C++ Primer 适配器
“适配器本质上是一种机制,能使某种事物的行为看起来想另外一种事物一样。一个容器适配器接受一种已有的容器类型,使其行为看起来像一种不同的类型。”我的理解是,适配器就是类似转换线,我们无需重新写一个新的容器,而只需利用适配器,就可以在原来容器的基础上进行一些操作。但那为什么不直接用原来的容器呢?我想可能是因为STL中的容器是通用模板十分强大,但我们在某些应用中并不需要,有时只需其中的一部分功能,这...原创 2019-04-05 10:20:36 · 149 阅读 · 0 评论 -
stack解决括号匹配问题
#include<iostream>#include<string>#include<stack>using namespace std;bool judge(const string& str){ stack<char> s; for (auto i : str) { switch (i) { case '('...原创 2019-04-05 23:57:52 · 330 阅读 · 0 评论 -
C++位运算实现离散Warshall算法
#include<iostream>#include<vector>using namespace std;inline void SetBit(char& c, int n, int i) //将char中的第n位bit设为i{ i ? c |= i << n : c &= ~(1 << n);}inline in...原创 2019-04-07 22:42:45 · 241 阅读 · 0 评论 -
C++ Primer ——谓词与lambda
谓词谓词是一个可调用的表达式,其返回结果是一个能用作条件的值。标准库算法所用谓词分为两类:1、一元谓词:意味着只接受单一参数 2、二元谓词:意味着有两个参数 接受谓词的算法对序列的元素调用谓词,因此元素类型必须能转换为谓词的参数类型(并不要求类型一致)比如下面这个函数就是一个二元谓词,因为有两个参数。bool isShorter(c...原创 2019-04-13 17:18:44 · 590 阅读 · 0 评论 -
C++实现离散数学之集合与关系运算、性质判断与闭包运算
我尝试着编程实现了课本上集合与关系的相关内容,如集合的逆运算,复合运算,集合上关系的性质判断与闭包运算等,基本判断方法均为定义法。代码如下:#include<iostream>#include<vector>#include<algorithm>using namespace std;typedef vector<vector<in...原创 2019-05-08 20:28:16 · 4370 阅读 · 0 评论 -
C++ Primer IO类(文件流,string流)
条件状态iostate类型提供了表达流状态的完整功能,这个类型应作为一个位集合,可以与位运算一起使用。说实话,现在来回看了两三遍都还是对什么置位、复位、标志位之类的概念有些模糊,可能是学的还不够多,所以现在先把问题放下,以后再回来弄懂吧。先记录下一些内容。练习8.1:编写函数,接受一个istream&参数,返回值类型也是istream&。此函数须从给定的流中读取数据,直...原创 2019-05-15 18:23:31 · 249 阅读 · 0 评论 -
C++ Primer 编写StrBlob类(含相关问题)
题目:编写一个StrBlob类,使多个对象能共享相同的底层数据(即某个对象被销毁后,若仍有对象使用其数据,则不会销毁底层数据),并且对象要能进行一定的读写操作。为了实现数据共享,我们使用一个shared_ptr管理动态分配的vector,只有某个对象的引用次数为0时,智能指针才会将其数据自动销毁。读写操作:定义size()、empty()、push_back()、pop_back()、fron...原创 2019-05-20 22:52:31 · 1071 阅读 · 0 评论 -
C++ size_t、size_type与int联系与区别
32位机器 size_t = unsigned int 4字节 64位机器 size_t = unsigned long int 8字节 内容转自:https://blog.csdn.net/lzx_bupt/article/details/6558566size_type:由string类类型和vector类类型定义的类型,用以保存任意string对...转载 2019-05-11 17:25:55 · 2064 阅读 · 0 评论 -
C++ Primer 第11章关联容器习题
练习11.4:扩展你的单词计数程序,忽略大小写和标点。例如,"example."、"example,"和"Example"应该递增相同的计数器思路:1、将输入的单词转为小写2、如果有标点,则将其删去(利用remove_if和erase)这里用到的remove_if和erase又再次印证了书中前面说的一句话:标准库算法不会直接改变容器的大小和元素。remove_if只是将使谓词为...原创 2019-05-17 15:56:18 · 575 阅读 · 0 评论 -
C++ Primer 一处错误更正
P389 表11.7中写道:c.equal_range(k) 返回一个迭代器pair,表示关键字等于k的元素的范围。若k不存在,pair的两个成员均等于c.end()错误在最后一句:若k不存在,pair的两个成员均等于c.end()学习这里的时候,我将lower_bound、upper_bound、equal_range都手敲试了一下,发现在k元素不存在时,equal_range...原创 2019-05-18 18:07:33 · 472 阅读 · 0 评论 -
C++ Primer 文本查询程序
题目:我们将实现一个简单的文本查询程序,我们的程序允许用户在一个给定文件中查询单词。查询结果是单词在文件中出现的次数及其所在行的列表。如果一个单词在一行中出现多次,此行只列出一次。行会按照升序输出。我们可以直接使用vector 、set和map来直接编写文本查询程序,但我们在这里定义一个抽象的解决方案会更有效。在看了书上题目要求及其思路后,感觉不难,便自己写了一个,代码还用到了前面学的泛型...原创 2019-05-31 21:26:10 · 601 阅读 · 2 评论 -
C++ Primer StrVec类和简化的string类
学习动态内存管理确实很累,看+写 花了很长的时间。写这两个类使我对vector、string的内部实现、动态分配的方法有了更深的理解。更重要的是,随着写的类越来越多,我慢慢地体会到了:写一个类,构造其结构是十分重要的。哪些是public,哪些是private,哪些函数应该作为成员函数,哪些函数应该作为友元函数,而哪些代码应该写成一个函数,其作为函数时参数、返回值的确定又应当考虑哪些……诸如此类,这...原创 2019-07-02 15:15:51 · 743 阅读 · 0 评论 -
C++ Primer 行为像值的类与行为像指针的类Hasptr
#ifndef HASPTR#define HASPTR#include<iostream>#include<string>class HasPtr //行为像值的类{ friend void swap(HasPtr &hp1, HasPtr &hp2); friend bool operator<(const HasPtr ...原创 2019-06-30 16:37:57 · 356 阅读 · 0 评论 -
C++ Primer Message和Folder类
在写包含这两个类的头文件时,有一个问题值得注意。我是先写Message类后写Folder类的,而这两个类又需要操作对方的成员,因此要定义为友元类。而且,在定义Message类前一定要有Folder类的前向声明,Message有用到Folder类对象的函数都需定义在Folder类后,否则无法编译通过(未定义当然是无法使用的)。因此我所写的头文件的结构为: Folder类前向声明 - Mes...原创 2019-06-30 17:48:33 · 1485 阅读 · 0 评论 -
C++ Primer——编写较健壮的构造函数
题目:设计一个类,它又三个unsigned成员,分别表示年、月和日。为其编写构造函数,接受一个表示日期的string参数,你的构造函数应该能处理不同的数据格式,如January 1,1990、1/1/1990、Jan 1 1990等#include<iostream>#include<vector>#include<string>using name...原创 2019-04-04 22:36:34 · 198 阅读 · 0 评论 -
C++实现离散数学之真值表(试着自写头文件)
思路参考:https://blog.csdn.net/wjh2622075127/article/details/79843339感谢作者。试着写了一下头文件,并修改优化了。头文件:#ifndef TRUTH_TABLE_H#define TRUTH_TABLE_H#include<iostream>#include<string>#include&...原创 2019-03-26 19:47:01 · 2627 阅读 · 2 评论 -
C++ Primer练习——替换单词(多种做法,注意细节!)
题目:编写一个函数,接受三个string参数s、oldval、newval。使用迭代器+insert+erase函数将s中所有oldval替换为newval。注意:1、不要比较指向不同的迭代器2、下标遍历寻找子串用substr成员函数,迭代器遍历寻找子串利用两个迭代器初始化string方法一(迭代器+erase+insert):#include<iostream&...原创 2019-04-04 09:30:20 · 1124 阅读 · 0 评论 -
C++ Primer 3.4.2例题二分搜索及练习3.25、3.32、3.33、3.36
1.例题二分搜索:#include<iostream>#include<vector>using namespace std;int main(){ vector<int> text{ 1,2,3,4,5 }; int sought; cin >> sought; auto beg = text.begin(),end = te...原创 2019-01-31 18:43:40 · 372 阅读 · 0 评论 -
C++ Primer 3.6例题及练习3.43、3.44、3.45
1.例题一:#include<iostream>using namespace std;int main(){ constexpr size_t row = 3, col = 4; int ia[row][col]; unsigned cnt = 0; for (auto &i : ia) { for (auto &j : i) { ...原创 2019-01-31 20:53:37 · 367 阅读 · 0 评论 -
C++Primer练习3.17与3.20
3.17题目:从cin读入一组词并把它们存入一个vector对象,然后设法把所有词都改写为大写形式。输出改变后结果,每个词占一行。代码如下:#include<iostream>#include<string>#include<vector>using namespace std;int main(){ vector<string>...原创 2019-01-28 21:25:41 · 394 阅读 · 0 评论 -
计算鞍点(程序设计与算法(一))vector实现二维数组
马鞍点的题其实我之前学C的时候用内置二维数组做过,现在又碰到我便尝试下vector实现二维数组。#include<iostream>#include<vector>using namespace std;int main(){ constexpr int count = 5; int num, i, j, k; bool sign = false; ...原创 2019-02-06 13:26:23 · 401 阅读 · 0 评论 -
multimap(程序设计与算法(一))
一、用法二、应用#include<iostream>#include<map>using namespace std;struct studentinfo{ int id; char name[20];};struct student //multimap容器内元素是pair形式{ int score; studentinfo i...原创 2019-02-15 21:38:02 · 207 阅读 · 0 评论 -
位运算(程序设计与算法)(一))
知识点:强烈建议仅将位运算符用于处理无符号型。1.移位运算符(优先级低于算术,高于关系赋值和条件):<<(左移) >>(右移) 左侧运算对象按右侧的要求移动指定位数。右侧运算对象一定不能为负,且必须严格小于结果的位数,否则会未定义。左移时高位丢弃,低位补0。左移n位即是×2的n次方,左移操作比乘法快得多。 而右移高位补的数与原符号位相同,且除2的n次方结果往小取整...原创 2019-02-09 13:10:16 · 335 阅读 · 0 评论 -
sort对结构体排序(程序设计与算法(一))
#include<iostream>#include<string>#include<algorithm>using namespace std;struct student{ string name; int ID; double gpa;}a[] = { {"Jack",112,3.4} ,{"Mary",102,3.8},{"Pery"..原创 2019-02-12 15:44:26 · 278 阅读 · 0 评论 -
map(程序设计与算法(一))
一、用法与multiset和set的区别类似,但多了一个可以使用[ ],这十分好用二、应用(1)#include<iostream>#include<string>#include<map>using namespace std;struct Student{ string name; int score;};Studen...原创 2019-02-18 13:54:16 · 1519 阅读 · 0 评论 -
C++ Primer之main函数处理命令行选项
一般main函数是没有参数的,但有时我们确实需要给main传递实参,一种常见的情况是用户通过设置一组选项来确定函数要进行的操作。 main函数定义成:int main(int argc,char *argv[])第二个形参是一个数组,而第一个形参表示数组中的字符串数量 ,为实参数量+1,因为argv的第一个元素是指向运行程序名的,后面才是指向各个实参。代码:#inclu...原创 2019-03-02 12:06:18 · 376 阅读 · 0 评论 -
C++Primer之编写类头文件(已添加完整Sales_data头文件)
新:#ifndef SALES_DATA_H#define SALES_DATA_H#include<iostream>#include<string>using namespace std;class Sales_data{ //友元 friend Sales_data add(const Sales_data& lns, const S...原创 2019-03-03 11:54:12 · 789 阅读 · 0 评论 -
C++ Primer——Sales_item.h头文件源码及相关问题解决
在C++ Primer 第五版中有一个小练习要将网站上的头文件源码“拷贝到工作目录中”,首先,似乎并没有那个网站,源码也是百度资源上找的。其次,拷贝到工作目录中,添加头文件有个小细节。源码如下:#ifndef SALESITEM_H#define SALESITEM_H#include &amp;amp;amp;lt;iostream&amp;amp;amp;gt;#include &amp;amp;amp;lt;string&amp原创 2019-01-25 14:57:39 · 12308 阅读 · 17 评论