C++ 在c+中使用递归构建字符串+;
我有一个值矩阵(存储为一个值数组)和一个具有矩阵维数的向量(dims[d0,d1,d2])。 我需要构建一个这样的字符串: matA(j,k,l)=x 其中j,k,l是矩阵的指数,x是元素的值。我需要为矩阵的每个值和2到n维的矩阵写这个 我在隔离基本情况并以有用的方式复制它时遇到问题。我在一个开关盒中制作了一个版本,每个尺寸都有一个盒,循环数等于尺寸数:C++ 在c+中使用递归构建字符串+;,c++,string,recursion,matrix,C++,String,Recursion,Matrix,我有一个值矩阵(存储为一个值数组)和一个具有矩阵维数的向量(dims[d0,d1,d2])。 我需要构建一个这样的字符串: matA(j,k,l)=x 其中j,k,l是矩阵的指数,x是元素的值。我需要为矩阵的每个值和2到n维的矩阵写这个 我在隔离基本情况并以有用的方式复制它时遇到问题。我在一个开关盒中制作了一个版本,每个尺寸都有一个盒,循环数等于尺寸数: for (unsigned int k=1; k<=(dims[2]); k++) { for (unsigned int j=1; j
for (unsigned int k=1; k<=(dims[2]); k++)
{
for (unsigned int j=1; j<=(dims[1]); j++)
{
for (unsigned int i=1; i<=(dims[0]); i++)
{
strs << matName << "(" << i << "," << j << ","<< k << ")="<< tmp[t]<< "; ";
....
for(unsigned int k=1;k您需要一个单独的辅助函数来递归地生成一系列索引和对其进行操作的主函数
比如说
void worker(stringstream& strs, int[] dims, int dims_size, int step) {
if (step < dims_size) {
... // Add dims[step] to stringstream. Another if may be necessary for
... // whether include `,` or not
worker(strs, dims, dims_size, step + 1);
} else {
... // Add cell value to stringstream.
}
}
string create_matrix_string(int[] dims, int dims_size, int* matrix) {
... // Create stringstream, etc.
strs << ... // Add matrix name etc.
worker(strs, dims, dims_size, 0);
strs << ... // Add ending `;` etc.
}
void worker(stringstream&strs,int[]dims,int dims\u size,int step){
如果(步长 strs您可以通过在dim[]大小的容器中进行i、j和k来解决此问题-样本:
#include <iostream>
#include <vector>
template< typename Itr >
bool increment( std::vector< int >& ijk, Itr idim, int start )
{
for( auto i = begin(ijk); i != end(ijk); ++i, ++idim )
{
if( ++*i <= *idim )
return true;
*i = start;
}
return false;
}
int main()
{
using namespace std;
int dim[] = { 5, 7, 2, 3 };
const int start = 1;
vector< int > ijk( sizeof(dim)/sizeof(*dim), start );
for( bool inc_done = true; inc_done
; inc_done = increment( ijk, begin(dim), start ) )
{
// .. here make what you want to make with ijk
cout << "(";
bool first = true;
for( auto j = begin(ijk); j != end(ijk); ++j )
{
if( !first )
cout << ",";
else
first = false;
cout << *j;
}
cout << ")= tmp[t] " << endl;
}
return 0;
}
#包括
#包括
模板
布尔增量(std::vector&ijk、Itr-idim、int-start)
{
for(自动i=开始(ijk);i!=结束(ijk);++i,++idim)
{
如果(++*i ijk(sizeof(dim)/sizeof(*dim),则开始;
for(bool inc_done=true;inc_done
inc_done=增量(ijk,开始(dim),开始))
{
//…这是你想用ijk做的
你想看看数据是不是存储在一维数组中?@interjay是的,数据存储在一维数组中。