C++ 合并排序错误-表达式必须具有常量值 #包括“stdafx.h” #包括 #包括 #包括 #包括 #包括 使用名称空间std; 无效合并(int A[],int p,int q,int r){ int i; int j; int k; int n1=q-p+1; int n2=r-q; 向量L(n1),R(n2); 对于(i=0;i CONTXPRP变量”,那么这将起作用。
我得到了这个带有int L[n1],R[n2];;的合并排序程序。Visual studio给了我“表达式必须有一个常量值”。我不知道该怎么办。我也尝试过使用向量,但得到了“表达式:向量下标超出范围”错误。文本文件中的数字是从5到900的20个随机数,未排序。有没有关于如何放置数组大小的非常量数字的指针C++ 合并排序错误-表达式必须具有常量值 #包括“stdafx.h” #包括 #包括 #包括 #包括 #包括 使用名称空间std; 无效合并(int A[],int p,int q,int r){ int i; int j; int k; int n1=q-p+1; int n2=r-q; 向量L(n1),R(n2); 对于(i=0;i CONTXPRP变量”,那么这将起作用。,c++,C++,我得到了这个带有int L[n1],R[n2];;的合并排序程序。Visual studio给了我“表达式必须有一个常量值”。我不知道该怎么办。我也尝试过使用向量,但得到了“表达式:向量下标超出范围”错误。文本文件中的数字是从5到900的20个随机数,未排序。有没有关于如何放置数组大小的非常量数字的指针 旁注:我将数组int main设置为20,因为我知道该文件有20个数字。有没有办法为一个文件设置数组大小?我不知道其中将包含多少值?您不必预先分配向量。您可以继续添加内容,直到完成为止 #inc
旁注:我将数组int main设置为20,因为我知道该文件有20个数字。有没有办法为一个文件设置数组大小?我不知道其中将包含多少值?您不必预先分配向量。您可以继续添加内容,直到完成为止
#include "stdafx.h"
#include <iostream>
#include <stdio.h>
#include <fstream>
#include <stdlib.h>
#include <vector>
using namespace std;
void merge(int A[], int p, int q, int r) {
int i;
int j;
int k;
int n1 = q - p + 1;
int n2 = r - q;
vector<int> L(n1), R(n2);
for (i = 0; i < n1; i++)
L[i] = A[p + i - 1];
for (j = 0; j < n2; j++)
R[j] = A[q + j];
i = 1;
j = 1;
for (k = p ; k < r; k++) {
if (L[i] <= R[j]) {
A[k] = L[i];
i++;
}else{
A[k] = R[j];
j++;
}
}
}
void merges(int A[], int p, int r) {
if (p < r) {
int q = (p + r) / 2;
merges(A, p, q);
merges(A, q + 1, r);
merge(A, p, q, r);
}
}
void prin(int A[], int n) {
int j;
for (j = 0; j < n; j++)
printf("%d ", A[j]);
printf("\n");
}
int main(){
fstream infile;
infile.open("number.txt");
if (infile.is_open()) {
int i;
int A[20];
int n = sizeof(A) / sizeof(*A);
int p = 0;
for (int i = 0; i < n; i++) {
infile >> A[i];
}
for (int j = 0; j < n; j++) {
if (A[j] > p)
p = A[j];
}
merges(A, 0, n);
prin(A, n);
}
return 0;
}
intmain()
{
std::ifstream文件;
打开(“TextFile1.txt”);
std::字符串str;
std::vectorstrs;
对于(;std::getline(文件,str);)
标准后推(str);
STD::CUT< P>不能使用<代码> Nav<代码>或<代码> N2<代码>作为C++中的数组边界,除非它们是编译时已知的常数。如果它们是“代码> CONTXPRP</CARD>变量”,那么这将起作用。
在C语言中,这些表达式将声明可变长度数组,这是一项可选功能。您已经找到了使用可变元素数的数组的解决方案-它是std::vector
。不过,您仍然需要获得正确的大小。此外,使用命名空间std;
被认为是有害的:您最好编写std::vector
。一堆旧代码定义了其他名为vector
或特别是string
的类。使用std::stable\u sort也就是说,最好是reserve()
尽可能多的空间,以避免可能需要将向量移动到不同的内存块。
int main()
{
std::ifstream file;
file.open("TextFile1.txt");
std::string str;
std::vector< std::string > strs;
for( ; std::getline( file, str ); )
strs.push_back( str );
std::cout << "the number of entries: " << strs.size( ) << std::endl;
return 0;
}