# cpp_code_snippet **Repository Path**: btg233/cpp_code_snippet ## Basic Information - **Project Name**: cpp_code_snippet - **Description**: c++primer相关的代码片段 - **Primary Language**: C++ - **License**: GPL-3.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2023-04-12 - **Last Updated**: 2023-04-20 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README ## [IO_1](https://gitee.com/btg233/cpp_code_snippet/blob/master/IO_1.cpp) 管理 IO 的流状态,使用不带参数的 clear() 版本 ## [string_1.cpp](https://gitee.com/btg233/cpp_code_snippet/blob/master/string_1.cpp) 使用 string 的 find 函数,在字符串中循环地查找子字符串出现的位置 ## [IO_iterator1.cpp](https://gitee.com/btg233/cpp_code_snippet/blob/master/IO_iterator1.cpp) 这个代码段使用了 istream_iterator。通过一对迭代器表示,从关联的流中读取数据,构造 vac istream_iterator eof; 这表示尾后迭代。因为这是空的,对于流来讲,遇到文件结尾或者 IO 错误,迭代器的值就等于尾后迭代器 ## [IO_iterator2.cpp](https://gitee.com/btg233/cpp_code_snippet/blob/master/IO_iterator2.cpp) 将 vec 中的每个元素写到 cout 中,后面加一个空格 注释版本也是可行的,或者是学完这部分内容我认为注释是正确且简洁的。但是最好写成非注释的版本 为了与其他迭代器保持一致。并且如果向改变操作或者更换迭代器类型,维护代码很方便。并且阅读更顺畅 ## [IO_iterator3.cpp](https://gitee.com/btg233/cpp_code_snippet/blob/master/IO_iterator3.cpp) 这段代码从第一个文件读取数字,奇数存入第二个文件,偶数存入第三个文件 使用 for_each 算法,同时完成了判断与输入。要注意,捕获列表是两个输出文件流的引用。条件表达式的返回值使用了 * 与 ++ 。如同上一个代码[IO_iterator2.cpp](https://gitee.com/btg233/cpp_code_snippet/blob/master/IO_iterator2.cpp)所讲,这样是为了阅读方便,就如同普通迭代器一样,赋值,再 ++。 *花哨,有点难理解,但是我喜欢* ## [IO_iterator4.cpp](https://gitee.com/btg233/cpp_code_snippet/blob/master/IO_iterator4.cpp) 从标准输入读取整数序列,在输出 这里读入输出均使用 copy 以及流迭代器。 copy 算法利用了输入和输出迭代器的特性,可以进行一些优化,如使用内存块拷贝等技术,以提高性能。此外,copy 算法还可以与其他算法和 STL 容器配合使用,提供更加灵活和高效的数据处理过程。而使用 for 循环,需要手动遍历容器中的每个元素,将它们逐一复制到另一个容器或输出流中。这种方式需要手动管理循环变量和边界条件,容易出错,也不如 copy 算法简洁和高效。 *不写for循环可太好了* ## [map_add1.cpp](https://gitee.com/btg233/cpp_code_snippet/blob/master/map_add1.cpp) 测试 map 的 下标、insert、emplace三种赋值。 下标运算符会保留最后一次添加的规则,而用 insert、emplace 则保留第一次添加的规则 insert只能临时变量传递,make_pair或者{}、emplace可以直接传值。 *这俩的区别有点难懂,如何选择不懂*