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