在 C++ 中初始化 std::vector 中的大小值时出错

error while initialising value of size in std::vector in c++

我是编程初学者,在实现向量时观察到一些新东西。 我在矢量初始化中的第一个代码不起作用,但第二个代码工作得很好。请解释一下背后的原因。

代码 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;
}

您可能正在寻找类似

的内容
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];