Skip to content

Commit 013f8d8

Browse files
committed
stage
1 parent 913374c commit 013f8d8

File tree

23 files changed

+1497
-303
lines changed

23 files changed

+1497
-303
lines changed

1001/stl_map/experiment/main.cpp

Lines changed: 0 additions & 11 deletions
This file was deleted.

1001/stl_map/slides.md

Lines changed: 0 additions & 290 deletions
This file was deleted.

README.md

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@
2424

2525
# 课程大纲
2626

27-
课程分为前半段和后半段,前半段主要介绍现代 C++,后半段主要介绍并行编程与优化。
27+
第一季课程分为前半段和后半段,前半段主要介绍现代 C++,后半段主要介绍并行编程与优化。
2828

2929
1. 课程安排与开发环境搭建:cmake与git入门
3030
1. 现代C++入门:常用STL容器,RAII内存管理
@@ -40,6 +40,8 @@
4040
1. C++在ZENO中的工程实践:从primitive说起
4141
1. 结业典礼:总结所学知识与优秀作业点评
4242

43+
第二季正在绝赞连载中...
44+
4345
# 前置条件
4446

4547
硬件要求:
File renamed without changes.
File renamed without changes.
File renamed without changes.
Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
#pragma once
2+
3+
#include <typeinfo>
4+
#include <type_traits>
5+
#include <string>
6+
#if (defined(__GNUC__) || defined(__clang__)) && __has_include(<cxxabi.h>)
7+
#include <cxxabi.h>
8+
#include <cstdlib>
9+
#endif
10+
11+
namespace _cppdemangle_details {
12+
13+
static std::string cppdemangle(const char *name) {
14+
#if (defined(__GNUC__) || defined(__clang__)) && __has_include(<cxxabi.h>)
15+
int status;
16+
char *p = abi::__cxa_demangle(name, 0, 0, &status);
17+
std::string s = p ? p : name;
18+
std::free(p);
19+
#else
20+
std::string s = name;
21+
#endif
22+
return s;
23+
}
24+
25+
static std::string cppdemangle(std::type_info const &type) {
26+
return cppdemangle(type.name());
27+
}
28+
29+
template <class T>
30+
static std::string cppdemangle() {
31+
std::string s{cppdemangle(typeid(std::remove_cv_t<std::remove_reference_t<T>>))};
32+
if (std::is_const_v<std::remove_reference_t<T>>)
33+
s += " const";
34+
if (std::is_volatile_v<std::remove_reference_t<T>>)
35+
s += " volatile";
36+
if (std::is_lvalue_reference_v<T>)
37+
s += " &";
38+
if (std::is_rvalue_reference_v<T>)
39+
s += " &&";
40+
return s;
41+
}
42+
43+
}
44+
45+
using _cppdemangle_details::cppdemangle;
46+
47+
// Usage:
48+
//
49+
// cppdemangle<int>()
50+
// => "int"
51+
//
52+
// int i;
53+
// cppdemangle<decltype(i)>()
54+
// => "int"
55+
//
56+
// int i;
57+
// cppdemangle<decltype(std::as_const(i))>()
58+
// => "int const &"

stlseries/stl_map/experiment/main.cpp

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
#include <bits/stdc++.h>
2+
#include "print.h"
3+
#include "cppdemangle.h"
4+
#include "map_get.h"
5+
using namespace std;
6+
7+
int main() {
8+
map<string, int> m = {
9+
{"answer", 42},
10+
{"timeout", 4096},
11+
};
12+
m.insert({
13+
{"timeout", 985},
14+
{"delay", 211},
15+
});
16+
print(m);
17+
}

0 commit comments

Comments
 (0)