STL专题
一、algorithm
1、sort
Input:每组测试数据有两行,第一行有两个数n,m(0<n,m<1000000),第二行包含n个各不相同,且都处于区间[-500000,500000]的整数。
Output:对每组测试数据按从大到小的顺序输出前m大的数。
Sample Input:
5 3
3 -35 92 213 -644
Sample Output:
213 92 3
代码:
#include<iostream>
#include<algorithm>
#include<cstdio>
using namespace std; bool cmp(int a,int b){
return a>b;
} int main(){
int num1,num2;
while(cin>>num1>>num2){
int a[];
for(int i=;i<num1;i++){
scanf("%d",&a[i]);
}
sort(a,a+num1,cmp);
for(int i=;i<num2;i++){
cout<<a[i]<<" ";
}
cout<<endl;
}
system("pause");
return ;
}
问题2:
As a pretty special competition, many volunteers are preparing for it with high enthusiasm.
One thing they need to do is blowing the balloons.
Before sitting down and starting the competition, you have just passed by the room where the boys are blowing the balloons. And you have found that the number of balloons of different colors are strictly different.
After thinking about the volunteer boys' sincere facial expressions, you noticed that, the problem with more balloon numbers are sure to be easier to solve.
Now, you have recalled how many balloons are there of each color.
Please output the solving order you need to choose in order to finish the problems from easy to hard.
You should print the colors to represent the problems.
Input:The first line is an integer T which indicates the case number.
And as for each case, the first line is an integer n, which is the number of problems.
Then there are n lines followed, with a string and an integer in each line, in the i-th line, the string means the color of ballon for the i-th problem, and the integer means the ballon numbers.
It is guaranteed that:
T is about 100.
1≤n≤10.
1≤ string length ≤10.
1≤ bolloon numbers ≤83.(there are 83 teams :p)
For any two problems, their corresponding colors are different.
For any two kinds of balloons, their numbers are different.
Output:For each case, you need to output a single line.
There should be n strings in the line representing the solving order you choose.
Please make sure that there is only a blank between every two strings, and there is no extra blank.
Sample Input:
3
3
red 1
green 2
yellow 3
1
blue 83
2
red 2
white 1
Sample Output:
yellow green red
blue
red white
代码:
#include<iostream>
#include<algorithm>
#include<cstdio>
#include<string>
using namespace std; struct ss{
string col;
int val;
}num[]; bool cmp(ss a,ss b){
//return a.val>b.val;
if(a.val == b.val){
return a.col>b.col;
}else{
return a.val>b.val;
}
} int main(){
int t;
cin>>t;
getchar();
while(t--){
int n;
cin>>n;
for(int i=;i<n;i++){
cin>>num[i].col;
cin>>num[i].val;
}
sort(num,num+n,cmp);
for(int i=;i<n-;i++){
cout<<num[i].col<<" ";
}
cout<<num[n-].col<<endl;
}
system("pause");
return ;
}
问题3:插入排序
代码:
#include <cstdio>
#include <iostream>
using namespace std; int main(){
int temp[];
for(int i=;i<=;i++){
cin>>temp[i];
}
for(int i=;i<=;i++){
int t = temp[i];
int j = i;
while(j>&&t>temp[j-]){
temp[j] = temp[j-];
j--;
}
temp[j] = t;
}
for(int i=;i<=;i++){
cout<<temp[i]<<" ";
}
cout<<endl;
return ;
}
2、二分(有序序列)
eg:{1,2,2,3,3,3,5,5,5,5}
1
5 3
1 4 6 8 10
0 5
6 10
7 100000
#include<iostream>
#include<algorithm>
#include<cstdio>
#include<cstdlib>
using namespace std; int main(){
int t;
scanf("%d",&t);
for(int j=;j<=t;j++){
printf("Case %d:\n",j);
int n,m;
scanf("%d%d",&n,&m);
int temp[];
for(int i=;i<n;i++){
scanf("%d",&temp[i]);
}
while(m--){ int q1,q2;
scanf("%d%d",&q1,&q2);
int begin = (int)(lower_bound(temp,temp+n,q1)-temp);
int end = (int)(upper_bound(temp,temp+n,q2)-temp);
printf("%d\n",end-begin);
}
}
return ;
}
3、归并排序与逆序对个数
6 4
11 8
Sample Output
1 2 3 5 6 4
1 2 3 4 5 6 7 9 8 11 10
#include<iostream>
#include<algorithm>
#include<cstdio>
using namespace std; int main(){
int n,m;
while(cin>>n>>m){
int a[];
for(int i=;i<n;i++){
a[i] = i+;
}
int p=;
do{
p++;
if(p==m){
for(int i=;i<n-;i++){
cout<<a[i]<<" ";
}
cout<<a[n-]<<endl;
break;
}
}while(next_permutation(a,a+n));
}
system("pause");
return ;
}
二、stack
问题1:
Input:The input contains several test cases. The first line of the input is a single integer T which is the number of test cases. T test cases follow.
Each test case contains a single line with several words. There will be at most 1000 characters in a line.
Output:For each test case, you should output the text which is processed.
Sample Input:
3
olleh !dlrow
m'I morf .udh
I ekil .mca
Sample Output:
hello world!
I'm from hdu.
I like acm.
代码:
#include<iostream>
#include<algorithm>
#include<stack>
#include<string>
#include<cstdio>
using namespace std; int main(){
string s;
int t;
cin>>t;
getchar();
while(t--){
getline(cin,s);
int len = (int)s.size();
stack<char>st;
for(int i =;i<len;i++){
if(s[i] != ' '){
st.push(s[i]);
}
if(s[i] == ' '||i == len-){
while(!st.empty()){
printf("%c",st.top());//获得栈顶元素
st.pop();//弹出栈顶元素
}
if(s[i] == ' '){
cout<<" ";
}
}
}
cout<<endl;
}
system("pause");
return ;
}
问题2:
Input:测试输入包含若干测试用例,每个测试用例占一行,每行不超过200个字符,整数和运算符之间用一个空格分隔。没有非法表达式。当一行中只有0时输入结束,相应的结果不要输出。
Output:对每个测试用例输出1行,即该表达式的值,精确到小数点后2位。
Sample Input:
1 + 2
4 + 2 * 5 - 7 / 11
0
Sample Output:
3.00
13.36
代码1(复杂,适用于所有):
#include<iostream>
#include<algorithm>
#include<queue>
#include<stack>
#include<map>
#include<cstring>
#include<cstdio>
#include<cstdlib>
using namespace std;
//cout<<"AAAA"<<endl; struct node{
double num;
char op;
bool flag;
}; stack<node> s;
queue<node> q;
map<char,int> op; void change(string str);
double cal(); string str;
int main(){
op['+'] = op['-'] = ;
op['*'] = op['/'] = ;
while(getline(cin,str),str!=""){
string::iterator it;
for(it=str.end();it!=str.begin();it--){
if(*it == ' '){
str.erase(it);
}
}
while(!s.empty()){
s.pop();
}
change(str);
printf("%0.2f\n",cal());
}
system("pause");
return ;
} void change(string str){//前缀变后缀
node temp;
for(int i=;i<(int)str.size();){
if(str[i]=='('){
temp.flag = false;
temp.op = str[i];
s.push(temp);
i++;
}else if(str[i]==')'){
while(!s.empty()&&s.top().op!='('){
q.push(s.top());
s.pop();
}
s.pop();
i++;
}else if(str[i]>=''&&str[i]<=''){
temp.flag = true;
temp.num = str[i] - '';
i++;
while(i<(int)str.size()&&str[i]>=''&&str[i]<=''){
temp.num = temp.num*+(str[i]-'');
i++;
}
q.push(temp);
}else{
temp.flag = false;
while(!s.empty()&&op[str[i]]<=op[s.top().op]){
q.push(s.top());
s.pop();
}
temp.op = str[i];
s.push(temp);
i++;
}
}
while(!s.empty()){
q.push(s.top());
s.pop();
}
} double cal(){//计算后缀表达式:1 1 +
double temp1,temp2;
node cur,temp;
while(!q.empty()){
cur = q.front();
q.pop();
if(cur.flag==true){
s.push(cur);
}else{
temp2 = s.top().num;
s.pop();
temp1 = s.top().num;
s.pop();
temp.flag = true;
if(cur.op == '+'){
temp.num = temp1+temp2;
}else if(cur.op == '-'){
temp.num = temp1-temp2;
}else if(cur.op == '*'){
temp.num = temp1*temp2;
}else{
temp.num = temp1/temp2;
}
s.push(temp);
}
}
return s.top().num;
}
代码2(适用于带空格但没有括号的表达式):
#include<iostream>
#include<algorithm>
#include<cstring>
#include<cmath>
#include<stack>
using namespace std; int main(){
double num;
while(cin>>num){
stack<double> st;
char ch = getchar();
if(ch!=' '&&num==){
break;
}
st.push(num);
double n;
char c,s;
while(scanf("%c %lf%c",&c,&n,&s)!=EOF){
if(c=='+'){
st.push(n);
}else if(c=='-'){
st.push(-*n);
}else if(c=='*'){
st.top() = st.top()*n;
}else if(c=='/'){
st.top() = st.top()/n;
}
if(s!=' '){
break;
}
}
double sum = 0.0;
while(!st.empty()){
sum+=st.top();
st.pop();
}
printf("%.2f\n",sum);
}
return ;
}
代码3(适用于不带空格和括号的表达式):
#include<iostream>
#include<algorithm>
#include<cstring>
#include<cmath>
#include<stack>
using namespace std; int main(){
double num;
while(cin>>num){
stack<double> st;
if(num==){
break;
}
st.push(num);
double n;
char c;
while(scanf("%c",&c)!=EOF){
if(c=='\n'){
break;
}
cin>>n;
if(c=='+'){
st.push(n);
}else if(c=='-'){
st.push(-*n);
}else if(c=='*'){
st.top() = st.top()*n;
}else if(c=='/'){
st.top() = st.top()/n;
}
}
double sum = 0.0;
while(!st.empty()){
sum+=st.top();
st.pop();
}
printf("%.2f\n",sum);
}
return ;
}
代码3(适用于不带空格和括号的表达式且用数组模拟栈):
#include<iostream>
#include<algorithm>
#include<cstring>
#include<cmath>
#include<stack>
using namespace std; int main(){
int num;
int temp[],p=;
int sum;
while(cin>>num){
sum = ;
memset(temp,,sizeof(temp));
temp[p++] = num;
int n;
char c;
while(scanf("%c",&c)!=EOF){
if(c=='\n'){
break;
}
cin>>n;
if(c=='+'){
temp[p] = n;
p++;
}else if(c=='-'){
temp[p] = -*n;
p++;
}else if(c=='*'){
p--;
temp[p]= temp[p]*n;
p++;
}else if(c=='/'){
p--;
temp[p]= temp[p]/n;
p++;
}
}
for(int i=;i<p;i++){
sum+=temp[i];
}
printf("%d\n",sum);
}
return ;
}
三、queue
问题:
he miss his mother very much and is very scare now.You can't image how dark the room he was put into is, so poor :(.
As a smart ACMer, you want to get ACboy out of the monster's labyrinth.But when you arrive at the gate of the maze, the monste say :" I have heard that you are very clever, but if can't solve my problems, you will die with ACboy."
The problems of the monster is shown on the wall:
Each problem's first line is a integer N(the number of commands), and a word "FIFO" or "FILO".(you are very happy because you know "FIFO" stands for "First In First Out", and "FILO" means "First In Last Out").
and the following N lines, each line is "IN M" or "OUT", (M represent a integer).
and the answer of a problem is a passowrd of a door, so if you want to rescue ACboy, answer the problem carefully!
Input:The input contains multiple test cases.
The first line has one integer,represent the number oftest cases.
And the input of each subproblem are described above.
Output:For each command "OUT", you should output a integer depend on the word is "FIFO" or "FILO", or a word "None" if you don't have any integer.
Sample Input:
4
4 FIFO
IN 1
IN 2
OUT
OUT
4 FILO
IN 1
IN 2
OUT
OUT
5 FIFO
IN 1
IN 2
OUT
OUT
OUT
5 FILO
IN 1
IN 2
OUT
IN 3
OUT
Sample Output:
1
2
2
1
1
2
None
2
3
代码:
#include<iostream>
#include<algorithm>
#include<queue>
#include<stack>
#include<string>
#include<cstdio>
using namespace std; int main(){
int t;
cin>>t;
while(t--){
int n;
cin>>n;
string s1,s2;
cin>>s1;
if(s1 == "FIFO"){
queue<int> qu;
while(n--){
cin>>s2;
if(s2 == "IN"){
int num;
cin>>num;
qu.push(num);
}else{
if(qu.empty()){
cout<<"None"<<endl;
}else{
cout<<qu.front()<<endl;
qu.pop();
}
}
}
}else{
stack<int> st;
while(n--){
cin>>s2;
if(s2 == "IN"){
int num;
cin>>num;
st.push(num);
}else{
if(st.empty()){
cout<<"None"<<endl;
}else{
cout<<st.top()<<endl;
st.pop();
}
}
}
}
}
system("pause");
return ;
}
四、set(内部自动有序、不含重复)
问题:
球赛的规则如下:
如果A打败了B,B又打败了C,而A与C之间没有进行过比赛,那么就认定,A一定能打败C。
如果A打败了B,B又打败了C,而且,C又打败了A,那么A、B、C三者都不可能成为冠军。
根据这个规则,无需循环较量,或许就能确定冠军。你的任务就是面对一群比赛选手,在经过了若干场撕杀之后,确定是否已经实际上产生了冠军。
Input输入含有一些选手群,每群选手都以一个整数n(n<1000)开头,后跟n对选手的比赛结果,比赛结果以一对选手名字(中间隔一空格)表示,前者战胜后者。如果n为0,则表示输入结束。
Output对于每个选手群,若你判断出产生了冠军,则在一行中输出“Yes”,否则在一行中输出“No”。
Sample Input
3
Alice Bob
Smith John
Alice Smith
5
a c
c d
d e
b e
a d
0
Sample Output
Yes
No
代码:
#include<iostream>
#include<algorithm>
#include<set>
#include<string>
#include<cstdio>
using namespace std; int main(){
int t;
while(cin>>t){
if(t == ){
break;
}
set<string> st1,st2;
string s1,s2;
while(t--){
cin>>s1>>s2;
st1.insert(s1);
st1.insert(s2);
st2.insert(s2);
}
if(st1.size()-st2.size() != ){
cout<<"No"<<endl;
}else{
cout<<"Yes"<<endl;
}
}
system("pause");
return ;
}
五、迭代器
问题:
呵呵,很简单吧?
Input每组输入数据占1行,每行数据的开始是2个整数n(0<=n<=100)和m(0<=m<=100),分别表示集合A和集合B的元素个数,然后紧跟着n+m个元素,前面n个元素属于集合A,其余的属于集合B. 每个元素为不超出int范围的整数,元素之间有一个空格隔开.
如果n=0并且m=0表示输入的结束,不做处理。
Output针对每组数据输出一行数据,表示A-B的结果,如果结果为空集合,则输出“NULL”,否则从小到大输出结果,为了简化问题,每个元素后面跟一个空格.
Sample Input
3 3 1 2 3 1 4 7
3 7 2 5 8 2 3 4 5 6 7 8
0 0
Sample Output
2 3
NULL
代码:
#include<iostream>
#include<algorithm>
#include<set>
#include<string>
#include<cstdio>
using namespace std; int main(){
int num1,num2;
while(cin>>num1>>num2){
if(num1 == num2&&num1 == ){
break;
}
int num;
set<int> st;
for(int i=;i<num1;i++){
cin>>num;
st.insert(num);
}
for(int i=;i<num2;i++){
cin>>num;
if(st.find(num) != st.end()){
st.erase(num);
}
}
if(st.size() == ){
cout<<"NULL"<<endl;
continue;
}
set<int>::iterator it;
for(it=st.begin();it!=st.end();it++){
cout<<*it<<" ";
}
cout<<endl;
}
system("pause");
return ;
}
六、map(键值对)
问题:
InputOne line contians a number n ( n<=10000),stands for the number of shops.
Then n lines ,each line contains a string (the length is short than 31 and only contains lowercase letters and capital letters.)stands for the name of the shop.
Then a line contians a number m (1<=m<=50),stands for the days .
Then m parts , every parts contians n lines , each line contians a number s and a string p ,stands for this day ,the shop p 's price has increased s.
OutputContains m lines ,In the ith line print a number of the shop "memory" 's rank after the ith day. We define the rank as :If there are t shops' price is higher than the "memory" , than its rank is t+1.Sample Input
3
memory
kfc
wind
2
49 memory
49 kfc
48 wind
80 kfc
85 wind
83 memory
Sample Output
1
2
代码:
#include<iostream>
#include<algorithm>
#include<map>
#include<string>
#include<cstdio>
using namespace std; int main(){
int t;
while(cin>>t){
for(int i=;i<t;i++){
string s;
cin>>s;
}
int n;
cin>>n;
map<string,int> shop;
while(n--){
for(int i=;i<t;i++){
string name;
int price;
cin>>price;
cin>>name;
shop[name]+=price;
}
map<string,int>::iterator it;
int mas = ;
for(it=shop.begin();it!=shop.end();it++){
if(it->second>shop["memory"]){
mas++;
}
}
cout<<mas<<endl;
}
}
system("pause");
return ;
}
七、priority_queue(优先队列)
问题:
不过经过细心的0068的观察,他发现了医院里排队还是有讲究的。0068所去的医院有三个医生(汗,这么少)同时看病。而看病的人病情有轻重,所以不能根据简单的先来先服务的原则。所以医院对每种病情规定了10种不同的优先级。级别为10的优先权最高,级别为1的优先权最低。医生在看病时,则会在他的队伍里面选择一个优先权最高的人进行诊治。如果遇到两个优先权一样的病人的话,则选择最早来排队的病人。
现在就请你帮助医院模拟这个看病过程。
Input输入数据包含多组测试,请处理到文件结束。
每组数据第一行有一个正整数N(0<N<2000)表示发生事件的数目。
接下来有N行分别表示发生的事件。
一共有两种事件:
1:"IN A B",表示有一个拥有优先级B的病人要求医生A诊治。(0<A<=3,0<B<=10)
2:"OUT A",表示医生A进行了一次诊治,诊治完毕后,病人出院。(0<A<=3)
Output对于每个"OUT A"事件,请在一行里面输出被诊治人的编号ID。如果该事件时无病人需要诊治,则输出"EMPTY"。
诊治人的编号ID的定义为:在一组测试中,"IN A B"事件发生第K次时,进来的病人ID即为K。从1开始编号。
Sample Input
7
IN 1 1
IN 1 2
OUT 1
OUT 2
IN 2 1
OUT 2
OUT 1
2
IN 1 1
OUT 1
Sample Output
2
EMPTY
3
1
1
代码:
#include<iostream>
#include<algorithm>
#include<queue>
#include<string>
#include<cstdio>
using namespace std; struct node{
int value,id;
bool operator<(const node &b)const{
if(value == b.value){
return id>b.id;
}else{
return value<b.value;
}
}
}; int main(){
int t;
while(cin>>t){
node pep;
priority_queue<node> q[];
int time = ;
string s;
while(t--){
cin>>s;
if(s == "IN"){
int a;
cin>>a>>pep.value;
pep.id = time;
time++;
q[a-].push(pep);
}else{
int a;
cin>>a;
if(q[a-].empty()){
cout<<"EMPTY"<<endl;
}else{
cout<<q[a-].top().id<<endl;
q[a-].pop();
}
}
}
}
system("pause");
return ;
}
八、list
问题:
Input本题有多个测试数据组,第一行为组数N,接着为N行新兵人数,新兵人数不超过5000。
Output共有N行,分别对应输入的新兵人数,每行输出剩下的新兵最初的编号,编号之间有一个空格。
Sample Input
2
20
40
Sample Output
1 7 19
1 19 37
代码1:
#include<iostream>
#include<algorithm>
#include<queue>
#include<string>
#include<cstdio>
#include<stack>
#include<list>
#include<cmath>
#include<cstring>//
#include<cstdlib>//
using namespace std; int main(){
int t,n;
cin>>t;
while(t--){
cin>>n;
int k = ;
list<int> blist;
list<int>::iterator it;
for(int i=;i<=n;i++){
blist.push_back(i);
}
while(blist.size()>){
int num =;
for(it=blist.begin();it!=blist.end();){
if(num++%k == ){
it = blist.erase(it);
}else{
it++;
}
}
if(k == ){
k = ;
continue;
}else{
k = ;
continue;
}
//k==2?k=3:k=2;
}
for(it=blist.begin();it!=blist.end();it++){
if(it!=blist.begin()){
cout<<" ";
}
cout<<*it;
}
cout<<endl;
}
system("pause");
return ;
}
代码2:
STL专题的更多相关文章
- STL专题·vector容器
1.构造函数 vector():创建一个空vector vector(int nSize):创建一个vector,元素个数为nSize (vector<int> a(10);) vecto ...
- NOIp 数据结构专题总结 (1):STL、堆、并查集、ST表、Hash表
系列索引: NOIp 数据结构专题总结 (1) NOIp 数据结构专题总结 (2) STL structure STL 在 OI 中的运用:https://oi.men.ci/stl-in-oi/ s ...
- 各大算法专题-STL篇
这篇文章着重记录c++中STL的用法.主要粗略的介绍其用法,以知识点的形式呈现其功能,不会深入源码分析其工作原理. 排序和检索. sort(a,a+n),对a[0]往后的n个元素(包括a[0])进行排 ...
- 【算法专题】工欲善其事必先利其器—— 常用函数和STL
一. 常用函数 #include <stdio.h> int getchar( void ); //读取一个字符, 一般用来去掉无用字符 char *ge ...
- 算法专题-STL篇
这篇文章着重记录c++中STL的用法.主要粗略的介绍其用法,以知识点的形式呈现其功能,不会深入源码分析其工作原理. 排序和检索. sort(a,a+n),对a[0]往后的n个元素(包括a[0])进行排 ...
- 【算法专题】工欲善其事必先利其器—— C++ STL中vector(向量/不定长数组)的常用方法总结
#include<iostream> #include<cstdio> #include<string> #include<vector>//不定长数组 ...
- 跟我一起学STL(2)——vector容器详解
一.引言 在上一个专题中,我们介绍了STL中的六大组件,其中容器组件是大多数人经常使用的,因为STL容器是把运用最广的数据结构实现出来,所以我们写应用程序时运用的比较多.然而容器又可以序列式容器和关联 ...
- 几道STL题目(FJUT - OJ STL训练1)
这个OJ一直在做,一些专题题目都很好,从易至难,阶梯上升,很适合像我这样的蒟蒻 =7= 这篇是关于其中一个专题训练的题解思路及代码 http://120.78.128.11/Contest.jsp ...
- C++ Standard Template Library (STL) 高级容器
更多 STL 数据结构请阅读 NOIp 数据结构专题总结(STL structure 章节) std::map Definition: template < class Key, // map: ...
随机推荐
- orcle导入大数据文件
0,创建ctl文件 内容为 OPTIONS (skip=0) LOAD DATA CHARACTERSET 'UTF8' INFILE 'F:\anhui_data\20180814\shangh ...
- AcWing 789.数的范围
AcWing 789.数的范围 题目描述 给定一个按照升序排列的长度为n的整数数组,以及 q 个查询. 对于每个查询,返回一个元素k的起始位置和终止位置(位置从0开始计数). 如果数组中不存在该元素, ...
- python3基础
1.print()函数 支持自动换行: 不自动换行:使用 end=“” print格式化输出: 字符串格式化符号: • %c 格式化字符及其ASCII码• %s 格式化字符串• %d 格式化整数• ...
- pyhon学习Day18--继承
[知识点] 面向对象的三大特性:继承.多态.封装 [继承] (1)继承:class Person(Animal): ——括号里的:父类,基类,超类 括号外的:子类,派生类 class Animal ...
- 二、通过工厂方法来配置bean
调用静态工厂方法创建 Bean是将对象创建的过程封装到静态方法中. 当客户端需要对象时, 只需要简单地调用静态方法, 而不同关心创建对象的细节. 要声明通过静态方法创建的 Bean, 需要在 Bean ...
- JAVA环境配置(Windows10)
Java开发环境配置 下载JDK 首先我们需要下载java开发工具包JDK,下载地址:https://www.oracle.com/technetwork/java/javase/downloads/ ...
- HDU_4496_逆向并查集
http://acm.hdu.edu.cn/showproblem.php?pid=4496 逆向并查集,先读取,然后从后向前join每次保存答案即可. #include<iostream> ...
- python之reload用法
一.python2和python3的区别 python2中可以直接使用reload().python3中需要从库中导入,有两种方法: >>> from imp import relo ...
- bootstrap 图片类 和 按钮类 部分
bootstrap框架,来自 Twitter,基于 html ,css ,js.简介灵活. 首先引入 bootstrap.js bootstrap.css 及 jquery.js 这里不考虑 ...
- phpstorm+xmapp post不能传值
https://blog.csdn.net/apple_wheat/article/details/72937035 问题的原因在于: PhpStorm默认使用的是自带的内部服务器,却不使用XAMPP ...