本文整理汇总了C++中Vec::SetLength方法的典型用法代码示例。如果您正苦于以下问题:C++ Vec::SetLength方法的具体用法?C++ Vec::SetLength怎么用?C++ Vec::SetLength使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Vec
的用法示例。
在下文中一共展示了Vec::SetLength方法的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: getBenesShiftAmounts
// Get multiple layers of a Benes permutation network. Returns in out[i][j]
// the shift amount to move item j in the i'th layer. Also isID[i]=true if
// the i'th layer is the identity (i.e., contains only 0 shift amounts).
void ColPerm::getBenesShiftAmounts(Vec<Permut>& out, Vec<bool>& isID,
const Vec<long>& benesLvls) const
{
// Go over the columns one by one. For each column extract the columns
// permutation, prepare a Benes network for it, and then for every layer
// compute the shift amounts for this columns.
long n = getDim(dim); // the permutations are over [0,n-1]
// Allocate space
out.SetLength(benesLvls.length());
isID.SetLength(benesLvls.length());
for (long k=0; k<benesLvls.length(); k++) {
out[k].SetLength(getSize());
isID[k] = true;
}
Vec<long> col;
col.SetLength(n);
for (long slice_index = 0; slice_index < numSlices(dim); slice_index++) {
ConstCubeSlice<long> slice(*this, slice_index, dim);
for (long col_index = 0; col_index < slice.numCols(); col_index++) {
getHyperColumn(col, slice, col_index);
GeneralBenesNetwork net(col); // build a Benes network for this column
// Sanity checks: width of network == n,
// and sum of benesLvls entries == # of levels
assert(net.getSize()==n);
{long sum=0;
for (long k=0; k<benesLvls.length(); k++) sum+=benesLvls[k];
assert(net.getNumLevels()==sum);
}
// Compute the layers of the collapased network for this column
for (long lvl=0,k=0; k<benesLvls.length(); lvl += benesLvls[k], k++) {
// Returns in col the shift amounts for this layer in the network,
// restricted to this column. Also returns true if the returned
// permutation is the idendity, false otherwise.
bool id = collapseBenesLevels(col, net, lvl, benesLvls[k]);
isID[k] = isID[k] && id;
CubeSlice<long> oslice(out[k], getSig());
CubeSlice<long> osubslice(oslice, slice_index, dim);
setHyperColumn(col, osubslice, col_index);
} // next collapsed layer
} // next column
} // next slice
}
示例2: computeMultiEvalPoints
// powVec[d] = m_d = p_d^{e_d}
// computes multiEvalPoints[d] as a vector of length phi(m_d)
// containing base^{(m/m_d) j} for j in Z_{m_d}^*
void computeMultiEvalPoints(Vec< Vec<zz_p> >& multiEvalPoints,
const zz_p& base,
long m,
const Vec<long>& powVec,
const Vec<long>& phiVec)
{
long k = powVec.length();
multiEvalPoints.SetLength(k);
for (long d = 0; d < k; d++) {
long m_d = powVec[d];
long phi_d = phiVec[d];
long count = 0;
zz_p pow = conv<zz_p>(1);
zz_p mult = power(base, m/m_d);
multiEvalPoints[d].SetLength(phi_d);
for (long j = 0; j < m_d; j++) {
if (GCD(j, m_d) == 1) {
multiEvalPoints[d][count] = pow;
count++;
}
pow = pow * mult;
}
}
}
示例3: GenerateBase
void IndexCalc::GenerateBase(long quant){
Vec<ZZ> numbersTable;
numbersTable.SetLength(quant);
for(long i = 2; i < quant; ++i)
numbersTable[i] = conv<ZZ>("0");
for (long i = 2; i*i < quant; ++i ) // przeszukuj liczby od 2 do sqrt(n), 0 i 1 nie s¹ liczbami pierwszymi
{
if (numbersTable[i] == conv<ZZ>("1")) // je¿eli dana liczba jest ju¿ wykreœlona
continue; // to przejdŸ do kolejnej
for (long j = 2*i ; j < quant; j += i){ // przejdŸ od liczby 2 * i do n przesuwaj¹c siê o i
numbersTable[j] = conv<ZZ>("1"); // i ka¿d¹ z nich usuwaj ze zbioru
}
}
cout << "Liczby pierwsze z przedzia³u od 2 do " << quant << ":" << endl;
long j = 0;
for (int i = 2; i < quant; i++) // przeszukaj liczby od 2 do n
if (numbersTable[i] == conv<ZZ>("0")){ // jeœli liczba nie zosta³a usuniêta ze zbioru
j++;
primeNumbers.SetLength(j);
primeNumbers[j-1] = i;
}
}
示例4: buildBenesCostTable
// Compute the cost for all (n choose 2) possible ways to collapse levels.
// For j in [0..nlev-i) tab[i][j] is the cost of collapsing levels i..i+j.
// I.e., how many different shift amounts would we need to implement for
// a permutation-network-layer constructed by collapsing these levels.
void buildBenesCostTable(long n, long k, bool good, Vec< Vec<long> >& tab)
{
long nlev = 2*k-1;
tab.SetLength(nlev);
for (long i = 0; i < nlev; i++) tab[i].SetLength(nlev-i);
Vec<bool> aux_vec;
aux_vec.SetLength(2*n-1);
bool *aux = &aux_vec[n-1];
for (long i = 0; i < 2*n-1; i++) aux_vec[i] = false;
for (long i = 0; i < nlev; i++) {
list<long> x;
x.push_front(0L);
for (long j = 0; j < nlev-i; j++) {
long shamt = GeneralBenesNetwork::shamt(n, k, i+j);
// The shift amount for this level
addOffset(x, shamt, n, aux);
if (good)
tab[i][j] = reducedCount(x, n, aux) - 1;
else
tab[i][j] = x.size() - 1;
// FIXME: Alternative Impl:
// Replace the 5 lines above by
// addOffset(x, shamt, n, aux, good);
// tab[i][j] = x.size() - 1;
// Also initialize aux to false in every iteration
}
}
}
示例5: applyPermToVec
void applyPermToVec(Vec<T>& out, const Vec<T>& in, const Permut& p1)
{
assert(&out != &in); // NOT an in-place procedure
out.SetLength(p1.length());
for (long i=0; i<p1.length(); i++)
out[i] = in.at(p1[i]);
}
示例6: factorize
void factorize(Vec< Pair<long, long> > &factors, long N)
{
factors.SetLength(0);
if (N < 2) return;
PrimeSeq s;
long n = N;
while (n > 1) {
if (ProbPrime(n)) {
append(factors, cons(n, 1L));
return;
}
long p = s.next();
if ((n % p) == 0) {
long e = 1;
n = n/p;
while ((n % p) == 0) {
n = n/p;
e++;
}
append(factors, cons(p, e));
}
}
}
示例7: factorize
// Returns a list of prime factors and their multiplicity,
// N = \prod_i factors[i].first^{factors[i].second}
void factorize(Vec< Pair<long, long> > &factors, long N)
{
factors.SetLength(0);
if (N < 2) return;
PrimeSeq s;
long n = N;
while (n > 1) {
if (ProbPrime(n)) { // n itself is a prime, add (n,1) to the list
append(factors, cons(n, 1L));
return;
}
long p = s.next();
if ((n % p) == 0) { // p divides n, find its multiplicity
long e = 1;
n = n/p;
while ((n % p) == 0) {
n = n/p;
e++;
}
append(factors, cons(p, e)); // add (p,e) to the list
}
}
}
示例8: computePowVec
void computePowVec(Vec<long>& powVec,
const Vec< Pair<long, long> >& factors)
{
long k = factors.length();
powVec.SetLength(k);
for (long i = 0; i < k; i++)
powVec[i] = computePow(factors[i]);
}
示例9: computePowVec
// factors[d] = (p_d, e_d)
// computes powVec[d] = p_d^{e_d}
void computePowVec(Vec<long>& powVec,
const Vec< Pair<long, long> >& factors)
{
long k = factors.length();
powVec.SetLength(k);
for (long d = 0; d < k; d++)
powVec[d] = computePow(factors[d]);
}
示例10: AddFile
void FileList::AddFile(const char *name)
{
Vec<char> item;
item.SetLength(strlen(name)+1);
strcpy(item.elts(), name);
data.append(item);
}
示例11: computeDivVec
// powVec[d] = p_d^{e_d}, m = \prod_d p_d^{e_d}
// computes divVec[d] = m/p_d^{e_d}
void computeDivVec(Vec<long>& divVec, long m,
const Vec<long>& powVec)
{
long k = powVec.length();
divVec.SetLength(k);
for (long d = 0; d < k; d++)
divVec[d] = m/powVec[d];
}
示例12: computeDivVec
void computeDivVec(Vec<long>& divVec, long m,
const Vec<long>& powVec)
{
long k = powVec.length();
divVec.SetLength(k);
for (long i = 0; i < k; i++)
divVec[i] = m/powVec[i];
}
示例13: FFT
void FFTHelper::FFT(const zz_pX& f, Vec<zz_p>& v) const
{
tmp = f;
BluesteinFFT(tmp, m, root, powers, powers_aux, Rb, Rb_aux, Ra);
v.SetLength(phim);
for (long i = 0, j = 0; i < m; i++)
if (coprime[i]) v[j++] = coeff(tmp, i);
}
示例14: computeCycVec
// powVec[d] = p_d^{e_d}
// cycVec[d] = Phi_{p_d^{e_d}}(X) mod p
void computeCycVec(Vec<zz_pX>& cycVec, const Vec<long>& powVec)
{
long k = powVec.length();
cycVec.SetLength(k);
for (long d = 0; d < k; d++) {
ZZX PhimX = Cyclotomic(powVec[d]);
cycVec[d] = conv<zz_pX>(PhimX);
}
}
示例15: getHyperColumn
void getHyperColumn(Vec<T>& v, const ConstCubeSlice<T>& s, long pos)
{
long m = s.getProd(1);
long n = s.getDim(0);
assert(pos >= 0 && pos < m);
v.SetLength(n);
for (long i = 0; i < n; i++)
v[i] = s[pos + i*m];
}