我一直在用C++編寫一個迴文搜索器,並且我成功地編寫了一個....至少可以說是基本的。C++ Palindrome Finder優化
我正在尋找簡單地增加程序的運行速度,現在需要大約1分5秒的時間,使用我擁有的功能在1500字單詞列表上運行palindromes/2詞迴文測試。我想嘗試在更大的文件上運行它,但未能看到我可以進一步優化的位置?
任何幫助將不勝感激:P.S.這不適用於學校,只是爲了休閒。
#include <iostream>
#include <ostream>
#include <vector>
#include <fstream>
#include <algorithm>
using namespace std;
bool isPal(string);
int main() {
vector<string> sVec;
vector<string> sWords;
vector<string> sTwoWords1;
vector<string> sTwoWords2;
char myfile[256]="/home/Damien/Test.txt";
ifstream fin;
string str;
fin.open(myfile);
if(!fin){
cout << "fin failed";
return 0;
}
while(fin){
fin >> str;
sWords.push_back(str);
if(!fin){
break;
}
if(isPal(str)){
sVec.push_back(str);
}
else{
getline(fin, str);
}
}
reverse(sVec.begin(), sVec.end());
for(int i =0; i < sVec.size(); i++){
cout << sVec[i] << " is a Palindrome " <<endl;
}
// Test 2
for(int i=0; i<sWords.size(); i++){
for(int j=(i+1); j<sWords.size(); j++){
str = sWords[i]+sWords[j];
if(isPal(str)){
sTwoWords1.push_back(sWords[i]);
sTwoWords2.push_back(sWords[j]);
}
}
}
fin.close();
for(int i=0; i<sTwoWords1.size(); i++){
cout << sTwoWords1[i] << " and " << sTwoWords2[i] << " are palindromic. \n";
}
return 0;
}
bool isPal(string& testing) {
return std::equal(testing.begin(), testing.begin() + testing.size()/2, testing.rbegin());
}
你可以在'的std :: string`s的所有無用複製砍伐。另外,這應該在[CodeReview.SE](http://codereview.stackexchange.com/)上。 – Xeo 2011-12-14 21:08:17
你試過分析這個程序嗎? – dasblinkenlight 2011-12-14 21:10:26