(std::cout, s.data())); _c++ 文件打印 库">
赞
踩
其实是前面两篇文章的改进,我们也不多说了,print这个没点水平估计是看不懂
- namespace show_ {
- template<typename T,size_t i>
- void print(const T(&n)[i], const std::string s=" ") {
- std::copy(std::begin(n),std::end(n), std::ostream_iterator<T, char>(std::cout, s.data()));
- std::cout << std::endl;
- }
- template<typename T,size_t size>
- void print(const std::array<T,size> v, const std::string s = " ") {
- std::copy(std::begin(v), std::end(v), std::ostream_iterator<T, char>(std::cout, s.data()));
- std::cout << std::endl;
- }
- void print(const char* s) {
- std::cout << s << std::endl; //重载特殊情况,字符串常量输出
- }
- template<typename T>
- void print(const std::vector<T>n,const std::string s=" ") {
- std::copy(std::begin(n), std::end(n), std::ostream_iterator<T, char>(std::cout, s.data()));
- std::endl(std::cout);
- }
- template<typename T>
- void print(T v) {
- std::cout << v << std::endl;
- }
- template<typename T>
- void print(const std::list<T>& L,std::string s=" ") {
- for (auto it = L.begin(); it != L.end(); it++) { //list容器版本
- std::cout << *it << s;
- }
- std::cout << std::endl;
- }
- template<typename _Type1, typename _Type2, typename... _Types>
- void print(_Type1 _Value1, _Type2 _Value2, _Types... _Values)//c++17折叠表达式
- requires (sizeof...(_Types) > 0 || (!std::is_same_v<char*, _Type2> && !std::is_same_v<const char*, _Type2>))//requires是c++20的
- {
- std::cout << _Value1 << ',' << _Value2 << ",";
- ((std::cout << _Values ), ...);
- }
- namespace object { //这真是无奈之举,这个匹配,object命名空间内的除了遍历vector和array的数组外,标准数据类型直接打印也可行
- template<typename T>
- std::ostream& operator<<(std::ostream& os, const std::vector<T>& data)
- {
- for (auto& str : data)
- {
- os << str;
- }
- return os;
- }
- template<typename T, size_t size>
- std::ostream& operator<<(std::ostream& os, const std::array<T, size>& data)
- {
- for (auto& str : data)
- {
- os << str<<",";
- }
- return os;
- }
- void print() {}
- template<typename T, typename...Types>
- void print(T first, Types...args) {
- std::cout << first << '\n';
- print(args...);
- return;
- }
- }
- }
![](https://csdnimg.cn/release/blogv2/dist/pc/img/newCodeMoreWhite.png)
这是print,下面是测试的一部分代码
- #include"func.h"
- using namespace show_;//引入命名空间,所以写不写命名空间都行
- int main()
- {
- int n[10]{ 1,2,3,4,5,6,7,8,9,10 };
- std::vector<double>i{ 1.2,3,5,4,8,7,9,10,11,30.8 };
- std::cout << ::sort_::average(n, 0, 9) << std::endl;
- std::cout << ::sort_::sum(n, 0, 9) << std::endl;
- ::sort_::Inverted(n, 0, 9);//逆置
- for (auto i : n)std::cout << i << ",";
- std::endl(std::cout);
- std::cout << ::maxAmin::max(i) << "," << ::maxAmin::max(n) << std::endl;
- std::cout << ::maxAmin::min(i) << "," << ::maxAmin::min(n) << std::endl;
- show_::print(n,",");
- show_::print(n);
- show_::print(i);
- show_::print(i,"*");
- show_::print(1, 2, 3, 4, 5, "666", "阿巴巴");
- std::endl(std::cout);
- print(1);
- show_::print("可怕");
- show_::print(5.7);
- const std::string str("离谱");
- show_::print(str);
- print(5);
- print(std::move(12));
- show_::print(std::move(n));
- std::array<int, 5>v{ 1,2,3,4,5 };
- print(v);
- std::list<double>L{ 1.2,3.4,5.6,7.8,9,10,11,12 };
- print(L);
- print(L, ",");
- int a = 5;
- print(&a);
- size_t a2 = 10;
- print(a2);
- print("666666666", 5, 5.7, 8u);
- std::cout << std::endl;
- std::array<std::string, 1>a1{ "离谱" }, b1{ "6666" }, c1{ "阿巴巴" };//如果数组长度比初始化的长到时候就会一堆逗号
- std::vector<std::string>a3{ "离谱2" }, b2{ "66662" }, c2{ "阿巴巴2" };
- object::print(a1, b1, c1, 1000);
- print("下面是测试");
- object::print(a1, b1, c1);
- object::print(a3, b2, c2, 66666);
- object::print(666666);
- object::print(n,"是吗","6666");
- object::print("66666", "离谱");
- std::array<int, 10>A{ 1,2,3,4,5,6,7,8,9,10 }, B{ 10,9,8,7,6,5,4,3,2,1 };
- std::vector<std::string>A1{ "离谱" }, B1{ "6666" }, C1{ "阿巴巴" };
- object::print("可以",A, B, 10);
- object::print(A1, B1, C1, 666);
- return 0;
- }
![](https://csdnimg.cn/release/blogv2/dist/pc/img/newCodeMoreWhite.png)
能看懂就看吧,下面是文件的命名空间
- namespace file_ {
- //获取当前时间的字符串
- std::string time_() {
- time_t timep;
- time(&timep);
- char tmp[256];
- strftime(tmp, sizeof(tmp), "%Y年%m月%d日_%H点%M分%S秒", localtime(&timep));
- std::string s{ tmp };
- return s;
- }
- //创建文件夹,默认在同级目录
- std::string newFolder(std::string name = time_(), std::string path = "") {
- std::string temp = "md ";
- temp += path;
- temp += name;
- //std::cout << "创建文件夹 " << temp << std::endl;
- system(temp.data());
- return temp.substr(3);
- }
- //删除文件夹
- std::string deleteFolber(std::string path) {
- std::string s = "rd ";
- system((s += path).data());
- return s.substr(3);
- }
- //以追加模式打开写文件
- std::string newWriteFile(std::string name = time_()+=".txt", std::string data = time_(), std::string path = "") {
- path += name;
- std::ofstream ofs;
- ofs.open(path, std::ios::app);
- ofs << data;
- ofs.close();
- return path;
- }
- //创建新的文件写入,一开始有就删除再创建
- void newlyFile(std::string name = time_(), std::string data = time_(), std::string path = "") {
- path += name;
- std::ofstream ofs;
- ofs.open(path, std::ios::trunc);
- ofs << data;
- ofs.close();
- }
- //删除文件的数据
- void deleteData(std::string name ,std::string path = "") {
- path += name;
- std::ofstream ofs(path, std::ios::trunc);
- ofs.close();
- }
- //删除文件
- bool deleteFile(std::string path) {
- if (remove(path.data()) == 0) {
- //std::cout << "删除成功" << std::endl;
- return true;
- }
- else {
- std::cout << "删除失败" << std::endl;
- return false;
- }
- }
- //读取文件
- std::string readFile(std::string path) {
- std::ifstream ifs;
- ifs.open(path, std::ios::in);
- if (!ifs.is_open())
- {
- std::cout << "文件打开失败" << std::endl;
- return "";
- }
- std::string data{};
- while (ifs >> data);
- ifs.close();
- return data;
- }
- //打印输出
- void print(std::string path) {
- show_::print(readFile(path));
- }
- }
![](https://csdnimg.cn/release/blogv2/dist/pc/img/newCodeMoreWhite.png)
MSVC ,C++20,debug,明天见
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。