代码将向量存储为向量<;向量>;,为什么没有错误消息? 我正在处理一个前任代码留下的C++代码,它显然存储了向量作为向量。代码编译并运行,但我不明白为什么。下面是执行存储操作的函数 void setPotentialParameters(const int& seed, const int& nMax, const double& lambdaStd, const int fieldNum, potentialPars& par) { gsl_rng * r = gsl_rng_alloc (gsl_rng_taus); gsl_rng_set (r, seed); par.nMaximum= nMax; par.fNum= fieldNum; for (int i=0; i<100; i++) gsl_ran_gaussian (r, lambdaStd); int counter=0; vector<long int> tempNs(fieldNum); //Defines tempNs as a vector<long int> for (long int i=0; i< (-0.2+pow(2*nMax+1, fieldNum)); i++) { findPartition(i, fieldNum, 2*nMax+1, tempNs ); for (int i = 0; i < tempNs.size(); i++) { tempNs[i] -= nMax; } if (goodPartition(tempNs, nMax)) { counter++; par.lambdas.push_back(abs( gsl_ran_gaussian (r, lambdaStd))); par.nVals.push_back(tempNs); //Stores tempNs in nVals par.alphas.push_back(2*M_PI * gsl_rng_uniform (r)); }; }; }; void setPotentialParameters(常数int&seed、常数int&nMax、常数double&lambdast、常数int fieldNum、电势pars&par) { gsl_rng*r=gsl_rng_alloc(gsl_rng_taus); gsl_rng_集(r,种子); 最大值nMAX; 腓肠肌; 对于(int i=0;i

代码将向量存储为向量<;向量>;,为什么没有错误消息? 我正在处理一个前任代码留下的C++代码,它显然存储了向量作为向量。代码编译并运行,但我不明白为什么。下面是执行存储操作的函数 void setPotentialParameters(const int& seed, const int& nMax, const double& lambdaStd, const int fieldNum, potentialPars& par) { gsl_rng * r = gsl_rng_alloc (gsl_rng_taus); gsl_rng_set (r, seed); par.nMaximum= nMax; par.fNum= fieldNum; for (int i=0; i<100; i++) gsl_ran_gaussian (r, lambdaStd); int counter=0; vector<long int> tempNs(fieldNum); //Defines tempNs as a vector<long int> for (long int i=0; i< (-0.2+pow(2*nMax+1, fieldNum)); i++) { findPartition(i, fieldNum, 2*nMax+1, tempNs ); for (int i = 0; i < tempNs.size(); i++) { tempNs[i] -= nMax; } if (goodPartition(tempNs, nMax)) { counter++; par.lambdas.push_back(abs( gsl_ran_gaussian (r, lambdaStd))); par.nVals.push_back(tempNs); //Stores tempNs in nVals par.alphas.push_back(2*M_PI * gsl_rng_uniform (r)); }; }; }; void setPotentialParameters(常数int&seed、常数int&nMax、常数double&lambdast、常数int fieldNum、电势pars&par) { gsl_rng*r=gsl_rng_alloc(gsl_rng_taus); gsl_rng_集(r,种子); 最大值nMAX; 腓肠肌; 对于(int i=0;i,c++,vector,C++,Vector,,使用long向量的向量没有问题。 这与使用二维数组几乎相同,但不需要在编译时知道大小或管理内存分配 编译该代码没有问题。向量元素可以是原语(int、float、double)、指针或其他对象(如向量或用户定义的类)。上的约束(第一个)std::vector的类型参数相当松散。几乎任何非引用类型都可以存储在std::vector中,包括其他类型的std::vector中。这正是此代码所做的 您可以将std::vector包装成 struct partition { std::vecto

,使用long向量的向量没有问题。 这与使用二维数组几乎相同,但不需要在编译时知道大小或管理内存分配

编译该代码没有问题。向量元素可以是原语(int、float、double)、指针或其他对象(如向量或用户定义的类)。

上的约束(第一个)
std::vector
的类型参数相当松散。几乎任何非引用类型都可以存储在
std::vector
中,包括其他类型的
std::vector
中。这正是此代码所做的

您可以将
std::vector
包装成

struct partition { 
    std::vector<long int> indexes; 
    double lambda; 
    double alpha; 
}; 
这会增加清晰度,但会改变
潜在分区
的使用者访问这些值的方式。

一个
向量
具有
向量
类型的元素

vector
s
push_-back()
方法将元素复制到向量


在您所展示的代码中,
par.nValues
属于
vector
类型,因此推动
tempNS
——属于
vector
——是完全合适的。

在代码中使用注释,而不是在代码之前使用*注释,因为*在c++中具有某种意义,而不是as,而是In.。您可以拥有一个包含其他包的包。
vector
具有e
向量类型的元素
。向量的
push_back()
方法将元素复制到向量。
par.nValues
属于
向量类型
,因此推
tempNS
-属于
向量类型
是完全合适的。
向量nVals;
否,它的意思是
nVals[2][5]=2
。向量的第一个元素是索引0,而不是索引1。
struct partition { 
    std::vector<long int> indexes; 
    double lambda; 
    double alpha; 
}; 
struct potentialPartitions {
    int nMaximum;
    int fNum;
    std::vector<partition> partitions;
};