使用矢量表示Bad码错误的C++代码

使用矢量表示Bad码错误的C++代码,c++,string,vector,bad-alloc,C++,String,Vector,Bad Alloc,代码显示std::bad_alloc error不知道在移除push_-back时该怎么办它消失了。请帮忙做什么。只有当我输入一个巨大的字符串时才会发生这种情况,否则它运行得非常好。有没有另一种有效的方法来找到所有可能的子字符串,按字典顺序排列它们,然后将它们重新组合成一个字符串???请帮助 提前通知 #include <cmath> #include <set> #include <cstdio> #include <vector> #inc

代码显示std::bad_alloc error不知道在移除push_-back时该怎么办它消失了。请帮忙做什么。只有当我输入一个巨大的字符串时才会发生这种情况,否则它运行得非常好。有没有另一种有效的方法来找到所有可能的子字符串,按字典顺序排列它们,然后将它们重新组合成一个字符串???请帮助 提前通知

#include <cmath>
#include <set>
#include <cstdio> 
#include <vector> 
#include <iostream> 
#include<string> 
#include <algorithm>

using namespace std; 

bool sortByString(string &t1, string &t2)
{
   return t1 < t2;
}

int main() {

   string s,sub,i,c,q; 

   int T;
   cin>>T;

   while(T--){

      cin >> s;

      int length = s.length();

      cin>>q;
      vector<string> ss;

      for (c = 0; c < length; c++)
      {
         for (i =length-c;i>=1; i--)
         {
            ss.push_back(s.substr(c,i));
         }
      }

      s="";

      set<string> se(ss.begin(),ss.end());
      ss.assign(se.begin(),se.end());

      vector<string>::iterator p;

      for( p=ss.begin();p!=ss.end();++p)
         s.append(*p);   

      cout<<s[q-1]<<endl;
   }

   return 0; 
}

如果有一个由N个字符组成的字符串,则大约有N^2/2个子字符串,总字符数约为N^3/6。对于一个巨大的输入字符串,这可能是很多

最终,您需要将它们全部输出,因此减少内存占用的唯一方法是避免同时存储所有这些子字符串/字符

一个明显的优化是存储刚开始、结束的索引对,而不是子字符串。当您需要比较或打印子字符串时,可以使用索引对和原始字符串制作它们,然后执行任何操作并丢弃它们

这将帮助您摆脱多维数据集,但对于真正巨大的字符串来说,这可能还不够


另一个可以帮助你的观察是,在相同来源的子串中,较短的子串在词汇学上较小。例如,在生成最小但未使用的子字符串时,您可以使用该事实来减少可能性的数量。为了不破坏趣味性,我这里不详细介绍,但您可以使用一个数组,其中I-th元素存储从I开始但尚未打印的最短子字符串的长度。

您输入的字符串有多大?句子。使用它们。你在使用什么编译器?i被定义为字符串类型。这是不对的。它应该是一个完整的类型。编译器没有产生任何错误或警告吗?c也有同样的问题。请发布编译的代码。'i'是一个整数,犯了一个错误!!我理解它为什么不起作用。但我不明白你所建议的三元解决方案。请详细说明!!在找到所有的子字符串后,我需要按字典顺序对它们进行排序。我概述了两种不同的方法。一个是关于经济地存储子字符串。您仍然按照正常方式对它们进行排序,只是表示不同而已。另一个方法首先按排序顺序生成它们。第二种方法没有详细的描述,只是一个提示。好吧,现在我知道你说的第二种方法了。但是如何存储两个索引呢。我不知道该使用什么数据类型。保存它们之后,如何对索引进行排序?请尝试std::pair。您还可以创建自己的结构。