Если ваша программа основана на linux (например, у вас есть доступ к оболочке типа bash), вы можете получить все комбинации, скажем, a, b, c, d с N = 3, введя команду: " echo {a, b, c, d} {a, b, c, d} {a, b, c, d} "- который распечатает все вышеперечисленные комбинации: aaa, aab ... и т. д.
Тогда вы могли бы отловить этот вывод и проанализировать его по буквам и умножить базовый вектор (скажем (1,1,1,1) для dim = 4) на каждый из векторов, соответствующих букве. Но опять же, что вы подразумеваете под умножением векторов? Ты имеешь в виду найти величину a * a * a? Потому что вы не можете умножить (1x4) векторов вместе - вы можете взять только их точечное произведение. (таким образом, единственно возможная интерпретация a * a * a может выглядеть как | a | ^ 3.)
Пример вызова команды echo:
#include <stdio.h>
#include <string>
#include <vector>
int n; //user given - n>1
Vector4D* vectors[n]; // Or some other name for the class
// Have the user input the vectors
std::string base = "a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z";
std::string list = "{"+base.substr(0,2*n+1)+"}";
std::string query = "echo ";
for(int i = 0; i<4; i++){
query += list;
}
File *file;
file=popen(query.c_string(), "r");
char combo[4];
std::vector<Vector4D> results;
while(fscanf(file,"%s", combo)){
Vector4D result(1,1,1,1); //our default (identity) vector
for(int i = 0; i<4; i++){
result = Vector4D.multiply(result, Vectors[combo[i]-'a']);
}
results.push_back(result);
}
fclose(file);
что-то вроде этого, хотя а) непроверенное б) неполное в) работает только для выборок размером до 26 векторов (хорошо 52, если вы включите заглавные буквы)