【问题标题】:error while initialising value of size in std::vector in c++ [duplicate]在c ++中初始化std :: vector中的大小值时出错[重复]
【发布时间】:2021-09-04 10:05:42
【问题描述】:

我是编程初学者,在实现向量时发现了一些新东西。 我在向量初始化中的第一个代码不起作用,但第二个代码运行良好。请解释一下背后的原因。

代码 1:

#include <iostream>
using namespace std;
#include <vector>
vector<long long int>v;
v.reserve(2);
v.push_back(1);
v.push_back(2);
int main(){
   cout<<v[0]<<" "<<v[1]<<endl;
}

它输出错误:'v' 没有命名类型

代码 2:

#include <iostream>
using namespace std;
#include <vector>
vector<long long int>v;
int main(){
v.reserve(2);
v.push_back(1);
v.push_back(2);
cout<<v[0]<<" "<<v[1]<<endl;
}

它工作得很好,我首先关注它,因为它在我们处理一个中型程序时很有用,它有许多在 main 之外定义的函数。例如,在下面的代码中 push_back 工作正常,但我无法在前面定义大小,但我想这样做,因为我的向量有 100000 的大数据。 解释我的意思我的代码的一部分如下所示;

#include <iostream>
using namespace std;
#include <vector>
vector<unsigned long long int>v_val;
void MergeSort(long long arr[],long long n){
    long long count=0;
    if(n==1)
        return;
    long long U[n/2];long long V[n-n/2];
    for(long long i=0;i<n/2;i++){
        U[i]=arr[i];
        }
    for(long long i=0;i<n-n/2;i++){
        V[i]=arr[i+n/2];
        }
    MergeSort(U,n/2);
    MergeSort(V,n-n/2);
    count+=merge(U,n/2,V,n-n/2,arr,count);
    v_val.push_back(count);
}
int main(){
long long test_count=0;
    ifstream file_num("pr_as_2.txt");
    long long arr_num[100000];
    for(long long i=0;i<100000;i++){
        file_num>>arr_num[i];
    }
unsigned long long int sum_val=0;
   MergeSort(arr_num,70000);
   for(size_t i=0;i<v_val.size();i++){
       sum_val+=v_val[i];
   }
   cout<<sum_val;
}

【问题讨论】:

  • 您不能在函数之外编写代码。另外,请每个帖子一个问题。
  • 这能回答你的问题吗? Code outside functions
  • 我通常建议避免使用全局变量。

标签: c++ algorithm vector stl


【解决方案1】:

您可能正在寻找类似的东西

vector<long long int>v {1,2};

使用list initialization

void MergeSort(std::vector<long long>& arr[],long long n){
    long long count=0;
    if(n==1)
        return;
    std::vector<long long> U(arr.begin(), arr.begin()+n/2);
    std::vector<long long> V(arr.begin()++(n-(n/2)), arr.end());
    MergeSort(U,n/2);
    MergeSort(V,n-n/2);
    count+=merge(U,n/2,V,n-n/2,arr,count); <--- need to be fixed too
    v_val.push_back(count);
}

由于分配很多,这不是有效的,而是应该在开始时分配一个向量并作为参数传递以供合并重用。

以下是编译器扩展,不是 C++ 的一部分。

long long U[n/2];

【讨论】:

  • 非常感谢先生,实际上,我的主要疑问是this question 会请你看看。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-05-18
  • 1970-01-01
  • 2023-03-30
  • 1970-01-01
  • 1970-01-01
  • 2015-05-22
  • 1970-01-01
相关资源
最近更新 更多