Skip to content

Commit f983296

Browse files
添加线程互斥锁
1 parent 003dbb9 commit f983296

File tree

2 files changed

+85
-80
lines changed

2 files changed

+85
-80
lines changed

src/main.cpp

Lines changed: 60 additions & 80 deletions
Original file line numberDiff line numberDiff line change
@@ -1,98 +1,78 @@
1-
#include <cctype>
2-
#include <string>
31
#include <iostream>
4-
#include <utility>
52
#include <vector>
6-
#include <set>
7-
#include <map>
8-
#include <utility> // for std::forward()
9-
#include <memory>
10-
#include <functional>
11-
#include <algorithm>
12-
#include <sstream>
13-
#include <atomic>
14-
#include <iostream>
15-
#include <unistd.h>
16-
#include <cerrno>
17-
#include <cstring>
18-
#include <condition_variable>
19-
#include <algorithm>
20-
#include <unordered_map>
21-
#include <list>
3+
#include <numeric>
4+
#include <limits>
5+
#include <vector>
6+
#include <stack>
7+
#include <string>
8+
#include <cctype>
229

2310
using namespace std;
2411

25-
// 算法复杂度 O(logn)
26-
// 2. 查询原有数组下标
27-
28-
29-
3012
class Solution {
3113
public:
32-
// nums 是旋转之后的数组
33-
int search(vector<int>& nums, int target) {
34-
// 异常情况
35-
// 1. 数组为空, 2. ?
36-
if (nums.empty()) {
37-
return -1;
38-
}
3914

40-
41-
// 2. 定位target O(logn) 算法要求,需要使用二分查找
42-
int left = 0;
43-
int right = nums.size() - 1;
44-
// 先查看中间值
45-
int middle = 0;
46-
while (left < right) {
47-
// 每次循环需要重新定位中间值
48-
middle = (left + right) / 2;
49-
50-
//
51-
if (nums[middle] == target) {
52-
return middle;
53-
}
54-
55-
56-
57-
// 其他情况
58-
59-
if (nums[left] <= nums[middle]) {
60-
if (target < nums[middle]) {
61-
right = middle ;
62-
}
63-
else {
64-
left = middle;
15+
/* Write Code Here */
16+
int calculate(vector < string > tokens) {
17+
std::stack<int> stack;
18+
19+
20+
21+
for (const auto& token : tokens) {
22+
23+
std::cout << "=======" << token[0] << std::endl;
24+
// 正数或者负数两种情况
25+
if (isdigit(token[0]) || (token.size() > 1 && isdigit(token[1]))) {
26+
27+
stack.push(std::stoi(token));
28+
} else {
29+
std::cout << "------"<< std::endl;
30+
int rOp = stack.top();
31+
stack.pop();
32+
int lOp = stack.top();
33+
stack.pop();
34+
35+
switch (token[0]) {
36+
case '+':
37+
stack.push(rOp + lOp);
38+
break;
39+
case '-':
40+
stack.push(rOp - lOp);
41+
break;
42+
case '*':
43+
stack.push(rOp * lOp);
44+
break;
45+
case '/':
46+
stack.push(rOp / lOp);
47+
break;
48+
default:
49+
std::cerr << "Unexpected error" << std::endl;
6550
}
6651
}
67-
// 小于是乱序,大于是有序之后的后半段
68-
if (nums[right] )
69-
7052
}
71-
72-
73-
74-
75-
76-
77-
return -1;
53+
return stack.top();
7854
}
7955
};
8056

81-
82-
83-
8457
int main() {
58+
int res;
59+
60+
int tokens_size = 0;
61+
cin >> tokens_size;
62+
vector<string> tokens;
63+
string tokens_item;
64+
for(int tokens_i=0; tokens_i<tokens_size; tokens_i++) {
65+
getline(cin, tokens_item);
66+
tokens.push_back(tokens_item);
67+
}
68+
for (const auto& token : tokens) {
69+
std::cout << "======" << token << std::endl;
70+
}
8571

86-
Solution solution;
87-
88-
std::vector<int> num{4,5,6,7,0,1,2};
89-
90-
91-
std::cout << solution.search(num, 0) << std::endl;
92-
93-
94-
95-
72+
Solution *s = new Solution();
73+
res = s->calculate(tokens);
74+
cout << res << endl;
9675

9776
return 0;
98-
}
77+
78+
}

utils/asciidoc_manual.adoc

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -947,6 +947,31 @@ DiagramBlock <|-- PlantUmlBlock
947947
....
948948
949949
950+
[blockdiag]
951+
....
952+
blockdiag {
953+
A -> B -> C -> D;
954+
A -> E -> F -> G;
955+
}
956+
....
957+
958+
[actdiag, format="png"]
959+
....
960+
actdiag {
961+
write -> convert -> image
962+
963+
lane user {
964+
label = "User"
965+
write [label = "Writing reST"];
966+
image [label = "Get diagram IMAGE"];
967+
}
968+
lane actdiag {
969+
convert [label = "Convert reST to Image"];
970+
}
971+
}
972+
....
973+
974+
950975
==== 转义直译
951976
952977
- `\`可以将转义字符进行直译

0 commit comments

Comments
 (0)