mirror of
https://github.com/yanyiwu/cppjieba.git
synced 2025-07-18 00:00:12 +08:00
use vector's reserve
This commit is contained in:
parent
bc6ed2368d
commit
75581495b4
@ -105,7 +105,7 @@ namespace CppJieba
|
||||
bool _cut(Unicode::const_iterator begin, Unicode::const_iterator end, vector<Unicode>& res) const
|
||||
{
|
||||
assert(_getInitFlag());
|
||||
vector<size_t> status(end - begin);
|
||||
vector<size_t> status;
|
||||
if(!_viterbi(begin, end, status))
|
||||
{
|
||||
LogError("_viterbi failed.");
|
||||
@ -134,16 +134,18 @@ namespace CppJieba
|
||||
return false;
|
||||
}
|
||||
vector<Unicode> words;
|
||||
words.reserve(end - begin);
|
||||
if(!cut(begin, end, words))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
string tmp;
|
||||
size_t offset = res.size();
|
||||
res.resize(res.size() + words.size());
|
||||
for(size_t i = 0; i < words.size(); i++)
|
||||
{
|
||||
if(TransCode::encode(words[i], tmp))
|
||||
if(!TransCode::encode(words[i], res[offset + i]))
|
||||
{
|
||||
res.push_back(tmp);
|
||||
LogError("encode failed.");
|
||||
}
|
||||
}
|
||||
return true;
|
||||
@ -159,7 +161,7 @@ namespace CppJieba
|
||||
|
||||
size_t Y = STATUS_SUM;
|
||||
size_t X = end - begin;
|
||||
assert(status.size() == X);
|
||||
|
||||
size_t XYSize = X * Y;
|
||||
size_t now, old, stat;
|
||||
double tmp, endE, endS;
|
||||
@ -210,6 +212,7 @@ namespace CppJieba
|
||||
stat = S;
|
||||
}
|
||||
|
||||
status.resize(X);
|
||||
for(int x = X -1 ; x >= 0; x--)
|
||||
{
|
||||
status[x] = stat;
|
||||
|
@ -99,9 +99,8 @@ namespace CppJieba
|
||||
virtual bool cut(Unicode::const_iterator begin, Unicode::const_iterator end, vector<string>& res)const
|
||||
{
|
||||
assert(_getInitFlag());
|
||||
if(begin >= end)
|
||||
if(begin == end)
|
||||
{
|
||||
LogError("begin >= end");
|
||||
return false;
|
||||
}
|
||||
|
||||
@ -109,7 +108,6 @@ namespace CppJieba
|
||||
uRes.reserve(end - begin);
|
||||
if (!cut(begin, end, uRes))
|
||||
{
|
||||
LogError("get unicode cut result error.");
|
||||
return false;
|
||||
}
|
||||
|
||||
|
@ -39,7 +39,7 @@ namespace CppJieba
|
||||
|
||||
public:
|
||||
virtual bool cut(Unicode::const_iterator begin, Unicode::const_iterator end, vector<string>& res) const = 0;
|
||||
virtual bool cut(const string& str, vector<string>& res)const
|
||||
virtual bool cut(const string& str, vector<string>& res) const
|
||||
{
|
||||
assert(_getInitFlag());
|
||||
res.clear();
|
||||
@ -51,10 +51,9 @@ namespace CppJieba
|
||||
TransCode::decode(str, unicode);
|
||||
|
||||
Unicode::const_iterator left = unicode.begin();
|
||||
Unicode::const_iterator right = unicode.begin();
|
||||
Unicode::const_iterator right;
|
||||
|
||||
string oneword;
|
||||
while(right != unicode.end())
|
||||
for(right = unicode.begin(); right != unicode.end(); right++)
|
||||
{
|
||||
if(isIn(_specialSymbols, *right))
|
||||
{
|
||||
@ -62,14 +61,9 @@ namespace CppJieba
|
||||
{
|
||||
cut(left, right, res);
|
||||
}
|
||||
TransCode::encode(right, right + 1, oneword);
|
||||
res.push_back(oneword);
|
||||
right ++;
|
||||
left = right;
|
||||
}
|
||||
else
|
||||
{
|
||||
right ++;
|
||||
res.resize(res.size() + 1);
|
||||
TransCode::encode(right, right + 1, res.back());
|
||||
left = right + 1;
|
||||
}
|
||||
}
|
||||
if(left != right)
|
||||
|
Loading…
x
Reference in New Issue
Block a user