Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/125.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 打印所有可能的组合,包括复制件、订单事项_C++_For Loop_Recursion - Fatal编程技术网

C++ 打印所有可能的组合,包括复制件、订单事项

C++ 打印所有可能的组合,包括复制件、订单事项,c++,for-loop,recursion,C++,For Loop,Recursion,我试图将两个集合(向量)组合成一个大集合,其中包含两个集合的所有元素,包括重复项 例如: setA=“abc”和setB有“12345” 我的输出需要如下所示: {(a,1)(b,1)(c,1)} {(a,1)(b,1)(c,2)} {(a,1)(b,1)(c,3)} {(a,1)(b,1)(c,4)} {(a,1)(b,1)(c,5)} {(a,1)(b,2)(c,1)} {(a,1)(b,2)(c,2)} {(a,1)(b,2)(c,3)} {(a,1)(b,2)(c,4)} {(a,1)(

我试图将两个集合(向量)组合成一个大集合,其中包含两个集合的所有元素,包括重复项

例如:

setA=“abc”和setB有“12345” 我的输出需要如下所示:

{(a,1)(b,1)(c,1)}
{(a,1)(b,1)(c,2)}
{(a,1)(b,1)(c,3)}
{(a,1)(b,1)(c,4)}
{(a,1)(b,1)(c,5)}
{(a,1)(b,2)(c,1)}
{(a,1)(b,2)(c,2)}
{(a,1)(b,2)(c,3)}
{(a,1)(b,2)(c,4)}
{(a,1)(b,2)(c,5)}
{(a,1)(b,3)(c,1)}
{(a,1)(b,3)(c,2)}
.................    
{(a,5)(b,3)(c,5)}
{(a,5)(b,4)(c,1)}
{(a,5)(b,4)(c,2)}
{(a,5)(b,4)(c,3)}
{(a,5)(b,4)(c,4)}
{(a,5)(b,4)(c,5)}
{(a,5)(b,5)(c,1)}
{(a,5)(b,5)(c,2)} 
{(a,5)(b,5)(c,3)}
{(a,5)(b,5)(c,4)}
{(a,5)(b,5)(c,5)}
所有125个元件(5*5*5)

我试着用for循环来做这个

    for (size_t i = 0; i < v_setB.size(); i++)
    {
        for (size_t k = 0; k < v_setB.size(); k++)
        {
            for (size_t n = 0; n < v_setB.size(); n++)
            {
                stringstream  temp;
                temp << "{(" << v_setA[0] << "," << v_setB[i] << ")(" << v_setA[1] << "," << v_setB[k] << ")(" << v_setA[2] << "," << v_setB[n] << ")}";
                v_SavedElem.push_back(temp.str());
            }
        }
    }
for(size_t i=0;itemp函数应使用两个集合(例如“abc”和“12345”)作为参数,并生成您描述的字符串

那么,这样做如何:给它第三个参数——或者最好还是让它成为第一个参数——这是一个用作这些字符串前缀的字符串,另一个用于目标向量

该函数从setA中删除第一个元素,并将其附加到前缀字符串中。然后它在setB中的元素上迭代,保存结果或再次调用该函数(使用较短的setA)

void foo(字符串pref、向量v_setA、向量v_setB、向量&v_SavedElem)
{
向量::迭代器itrA=v_setA.begin();
pref+=“(”;
pref+=*itrA;
pref+=“,”;
v_setA.擦除(itrA);
对于(向量::迭代器itrB=v_setB.begin();itrB!=v_setB.end();++itrB)
{
if(v_setA.empty())
{
串流温度;

你对向量迭代器感到满意吗?不管有没有向量迭代器,解决方案都是可行的,但这是一个很好的习惯。当你说在第一个集合中有更多的元素时,解决方案“不起作用”-你这是什么意思?我非常怀疑递归不是你问题的答案。你能告诉我去哪里看吗,或者如果可能的话显示一些代码更高的数字是指第一集合(setA)中的元素数,如果它有4个元素“abcd”而不是3个“abc”是的!非常感谢,你的代码很容易理解和理解。
void foo(string pref, vector<char> v_setA, vector<char> v_setB, vector<string> &v_SavedElem)
{
  vector<char>::iterator itrA = v_setA.begin();
  pref += "(";
  pref += *itrA;
  pref+= ",";

  v_setA.erase(itrA);

  for(vector<char>::iterator itrB = v_setB.begin(); itrB!=v_setB.end(); ++itrB)
    {
      if(v_setA.empty())
      {
        stringstream  temp;
        temp << pref << *itrB << ")}" << endl;
        v_SavedElem.push_back(temp.str());
      }
      else
        foo(pref+*itrB+")", v_setA, v_setB, v_SavedElem);
    }
}