请大佬帮忙解答一下,普通数组与C++中vector容器差距那么大吗?
查看原帖
请大佬帮忙解答一下,普通数组与C++中vector容器差距那么大吗?
1535962
Jjq0211楼主2025/1/18 16:38
#include<iostream>
#include<vector>
#include<cmath>
using namespace std;

bool weishu(int n){
  if((n >= 1000 && n <= 9999) || (n >= 100000 && n <= 999999)){
    return false;
  }
  return true;
}
bool huiwen1(int n){
  vector<int> ret;
  while(n > 0){
    ret.push_back(n % 10);
    n /= 10;
  }
  int flag = ret.size() - 1;
  for (int i = 0; i <= flag / 2; i++){
    if(ret[i] != ret[flag - i]){
      return false;
    }
  }
  return true;
}
bool huiwen2(int x)
{
  vector<int> ret(20);
  int flag = 0;
  while (x > 0)
  {
    ret[flag] = x % 10;
    x /= 10;
    flag++;
  }
  for (int i = 0; i <= flag / 2; i++){
    if (ret[i] != ret[flag - i - 1]){
      return false;
    }
  }
  return true;
}
bool huiwen3(int x)
{
  int a[20], flag = 0;
  while (x > 0){
    a[flag] = x % 10;
    x /= 10;
    flag++;
  }
  for (int i = 0; i <= flag / 2; i++){
    if (a[i] != a[flag - i - 1]){
      return false;
    }
  }
  return true;
}
bool isPrime(int n){
  if (n <= 1){
      return false;
    }
  if (n == 2){
    return true;
  }
  for (int i = 2; i <= sqrt(n); i++){
    if (n % i == 0){
      return false;
    }
  }
  return true;
}
int main(){
  int a, b;
  cin >> a >> b;
  int m = min(9999999, b);
  if(a == 2){
    cout << 2 << endl;
  }
  if(a % 2 == 0){
    a++;
  }
  for (int i = a; i <= m; i ++){
    if(weishu(i) && huiwen3(i) && isPrime(i)) {
      printf("%d\n", i);
      }
  }
  return 0;
}

我检索各种方法一点一点成功AC的,问题在于我的huiwen2函数与huiwen3函数。两个函数中huiwen2的数组是vector,huiwen3的数组是普通数组,除此之外,其他逻辑完全相同。我一直以为vector和普通数组的性能差距没那么大,但是huiwen2函数中用vector开数组超时了,而huiwen3函数用普通数组没有超时,顺利AC了。像huiwen1函数中我逐个向vector数组中插入元素导致的超时,我可以接受。但是huiwen2导致的超时我无法接受。请各位大佬帮忙解释一下,这是luogu评测的原因,还是说就是vector与普通数组的原因。

2025/1/18 16:38
加载中...