我正在努力解决这个难题:http://www.puzzleup.com/2015/puzzle/?13
要做到这一点,我想计算所有可能的代码并将它们传递给向量
您将使用字母A,B生成一组7个字母的代码, C,D,E,F和G
所以我尝试创建char数组的向量。代码在下面分享:
#include <iostream>
#include <string>
#include <vector>
#include <array>
#include <cmath>
char letters[] = {'a','b','c','d','e','f','g'};
char * tempArr;
char * pastArr;
std::vector<char * > deneme;
char s1[] = {'a', 'b'};
char s2[] = {'c', 'd'};
void calculateAllPossibilities(int depth, int lastDepth)
{
//depth 1 den baþlayacak
for( int i = 0; i < sizeof(letters); i++ )
{
//
if ( depth != 1 && depth != lastDepth )
{
//
tempArr = new char[depth];
for( int j = 0; j < depth-1; j++ )
{
//
*tempArr = pastArr[j];
tempArr++;
}
*tempArr = letters[i];
for( int x = 0; x < depth; x++ )
{
//
std::cout << tempArr[x] << ",";
}
std::cout << std::endl;
delete pastArr;
pastArr = new char[depth];
for( int k = 0; k < depth; k++ )
{
//
*pastArr = tempArr[k];
pastArr++;
}
delete tempArr;
calculateAllPossibilities(depth + 1, lastDepth );
}
else if( depth == lastDepth )
{
//
tempArr = new char[depth];
for( int k = 0; k < depth - 1; k++ )
{
//
*tempArr = pastArr[k];
tempArr++;
}
*tempArr = letters[i];
for( int x = 0; x < depth; x++ )
{
//
std::cout << tempArr[x] << ",";
}
std::cout << std::endl;
deneme.push_back(tempArr);
delete tempArr;
}
else if( depth == 1 )
{
//
pastArr = new char[depth];
*pastArr = letters[i];
std::cout << pastArr[0] << std::endl;
delete tempArr;
calculateAllPossibilities(depth + 1, lastDepth );
}
}
}
int main()
{
calculateAllPossibilities(1,7);
std::cout << deneme[0][2];
return 0;
}
问题是,当我尝试在不使用函数中的cout时尝试deneme向量的值时,它在每个编译中给出了不同的东西。像那些:“:”,“_”,“X”,“2”:)
然而,然后我添加了couts功能,并试图看到发生了什么和BAM!在couts之后我的电脑变得疯狂了!
我在这里做错了什么?我第一次遇到这样的事情。
答案 0 :(得分:2)
这根本不起作用
deneme.push_back(tempArr);
delete tempArr;
在向量中保存指向数组的指针,然后删除该数组。现在保存的指针无处可寻。
使用std::string
的矢量可以更好地工作。
此外,当您使用tempArr = new char[depth];
分配数组时,删除时也应使用[]
,例如delete[] tempArray
。这让编译器知道你正在删除一个数组,而不只是一个char。这并不重要。