优化代码 #include<bits/stdc++.h> using namespace std; int main(){ int n,m,k; vector<int>v; cin>>n; while(n--){ cin>>m>>k; if(m==1){ v.push_back(k); } if(m==2){ vector<int>::iterator it = find(v.begin(),v.end(),k); if(it!=v.end()) cout<<"True"<<endl; else cout<<"False"<<endl; } } }
时间: 2023-06-18 20:02:05 浏览: 144
以下是优化后的代码:
```
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main() {
int n, m, k;
vector<int> v;
cin >> n;
while (n--) {
cin >> m >> k;
if (m == 1) {
v.emplace_back(k);
} else if (m == 2) {
auto it = find(v.begin(), v.end(), k);
cout << (it != v.end() ? "True" : "False") << endl;
}
}
return 0;
}
```
主要的优化有:
1. 使用 `emplace_back` 替代 `push_back`,可以避免不必要的拷贝构造函数调用,提高效率;
2. 使用 `auto` 关键字自动推导变量类型,简化代码,提高可读性;
3. 对于 if-else 的判断语句,建议使用 else if,避免不必要的判断,提高效率;
4. 使用三目运算符代替 if-else 语句,简化代码,提高可读性。
相关问题
优化这段代码 #include<bits/stdc++.h> using namespace std; int f(int x) { if(x==1) return 0; for(int i=2;i<=sqrt(x);i++) if(x%i==0) return 0; return 1; } int main() { int n,m,k=0; cin>>n>>m; for(int i=n;i<=m;i++) if(f(i)) k++; // 是素数则计数器++ cout<<k;//输出k return 0; }
以下是对该代码的优化:
1. 头文件使用应该精确到所需的头文件,而不是使用 `#include<bits/stdc++.h>` 的方式。
2. 循环判断素数的时候,可以从 2 开始枚举,因为 1 肯定不是素数,所以可以直接排除。
3. 循环判断素数的时候,可以使用 i*i <= x 来代替 i <= sqrt(x),这样可以避免重复计算 sqrt(x)。
4. 判断素数的时候,可以只枚举到 i*i <= x,如果 x 能被 i 整除,则 x/i 也一定能被整除,所以不需要枚举到 sqrt(x),这样可以提高效率。
5. 将求素数的函数 f() 改为返回 bool 类型,可以更加直观地表示是否为素数。
6. 在循环统计素数的时候,可以使用前缀和的方式,避免重复计算。
7. 变量和函数名应该具有一定的语义化。
改进后的代码如下:
```c++
#include <iostream>
#include <cmath>
using namespace std;
bool is_prime(int x) {
if (x < 2) {
return false;
}
for (int i = 2; i * i <= x; i++) {
if (x % i == 0) {
return false;
}
}
return true;
}
int count_primes(int n, int m) {
int count = 0;
for (int i = n; i <= m; i++) {
if (is_prime(i)) {
count++;
}
}
return count;
}
int main() {
int n, m;
cin >> n >> m;
cout << count_primes(n, m) << endl;
return 0;
}
```
这样的代码可以更加高效地统计区间内的素数个数。
优化代码#include<bits/stdc++.h> using namespace std; int main(){ int n,m,k; vector<int>v; cin>>n; while(n--){ cin>>m>>k; if(m==1){ v.push_back(k); } if(m==2){ vector<int>::iterator it = find(v.begin(),v.end(),k); if(it!=v.end()) cout<<"True"<<endl; else cout<<"False"<<endl; } } }
你的代码看起来没有明显的问题,但可以考虑以下优化:
1. 使用`unordered_set`代替`vector`进行查找:使用`unordered_set`可以将查找时间从$O(n)$优化为$O(1)$,因为`unordered_set`使用哈希表进行实现。可以将`v`定义为`unordered_set<int>`类型,并且在第一个`if`语句中使用`insert`函数来插入元素。在第二个`if`语句中使用`count`函数来判断元素是否存在。
2. 使用`cin.tie(NULL)`和`ios_base::sync_with_stdio(false)`优化输入和输出速度:这两个函数可以加速输入和输出操作,特别是在大数据量的情况下。
3. 将`using namespace std`改为使用具体的命名空间:虽然`using namespace std`可以方便我们使用`std`命名空间中的函数和对象,但是在大型项目中可能会出现命名冲突等问题,建议使用具体的命名空间。
4. 使用`auto`关键字简化代码:使用`auto`关键字可以根据变量的初始化值自动推导出变量类型,可以简化代码。
下面是优化后的代码:
```cpp
#include <bits/stdc++.h>
using std::cin;
using std::cout;
using std::endl;
using std::unordered_set;
int main() {
cin.tie(NULL);
ios_base::sync_with_stdio(false);
int n, m, k;
unordered_set<int> s;
cin >> n;
while (n--) {
cin >> m >> k;
if (m == 1) {
s.insert(k);
} else if (m == 2) {
cout << (s.count(k) ? "True" : "False") << endl;
}
}
return 0;
}
```
阅读全文