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
|
bool _cut(Unicode::const_iterator begin, Unicode::const_iterator end, vector<Unicode>& res) const
|
||||||
{
|
{
|
||||||
assert(_getInitFlag());
|
assert(_getInitFlag());
|
||||||
vector<size_t> status(end - begin);
|
vector<size_t> status;
|
||||||
if(!_viterbi(begin, end, status))
|
if(!_viterbi(begin, end, status))
|
||||||
{
|
{
|
||||||
LogError("_viterbi failed.");
|
LogError("_viterbi failed.");
|
||||||
@ -134,16 +134,18 @@ namespace CppJieba
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
vector<Unicode> words;
|
vector<Unicode> words;
|
||||||
|
words.reserve(end - begin);
|
||||||
if(!cut(begin, end, words))
|
if(!cut(begin, end, words))
|
||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
string tmp;
|
size_t offset = res.size();
|
||||||
|
res.resize(res.size() + words.size());
|
||||||
for(size_t i = 0; i < words.size(); i++)
|
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;
|
return true;
|
||||||
@ -159,7 +161,7 @@ namespace CppJieba
|
|||||||
|
|
||||||
size_t Y = STATUS_SUM;
|
size_t Y = STATUS_SUM;
|
||||||
size_t X = end - begin;
|
size_t X = end - begin;
|
||||||
assert(status.size() == X);
|
|
||||||
size_t XYSize = X * Y;
|
size_t XYSize = X * Y;
|
||||||
size_t now, old, stat;
|
size_t now, old, stat;
|
||||||
double tmp, endE, endS;
|
double tmp, endE, endS;
|
||||||
@ -210,6 +212,7 @@ namespace CppJieba
|
|||||||
stat = S;
|
stat = S;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
status.resize(X);
|
||||||
for(int x = X -1 ; x >= 0; x--)
|
for(int x = X -1 ; x >= 0; x--)
|
||||||
{
|
{
|
||||||
status[x] = stat;
|
status[x] = stat;
|
||||||
|
@ -99,9 +99,8 @@ namespace CppJieba
|
|||||||
virtual bool cut(Unicode::const_iterator begin, Unicode::const_iterator end, vector<string>& res)const
|
virtual bool cut(Unicode::const_iterator begin, Unicode::const_iterator end, vector<string>& res)const
|
||||||
{
|
{
|
||||||
assert(_getInitFlag());
|
assert(_getInitFlag());
|
||||||
if(begin >= end)
|
if(begin == end)
|
||||||
{
|
{
|
||||||
LogError("begin >= end");
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -109,7 +108,6 @@ namespace CppJieba
|
|||||||
uRes.reserve(end - begin);
|
uRes.reserve(end - begin);
|
||||||
if (!cut(begin, end, uRes))
|
if (!cut(begin, end, uRes))
|
||||||
{
|
{
|
||||||
LogError("get unicode cut result error.");
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -51,10 +51,9 @@ namespace CppJieba
|
|||||||
TransCode::decode(str, unicode);
|
TransCode::decode(str, unicode);
|
||||||
|
|
||||||
Unicode::const_iterator left = unicode.begin();
|
Unicode::const_iterator left = unicode.begin();
|
||||||
Unicode::const_iterator right = unicode.begin();
|
Unicode::const_iterator right;
|
||||||
|
|
||||||
string oneword;
|
for(right = unicode.begin(); right != unicode.end(); right++)
|
||||||
while(right != unicode.end())
|
|
||||||
{
|
{
|
||||||
if(isIn(_specialSymbols, *right))
|
if(isIn(_specialSymbols, *right))
|
||||||
{
|
{
|
||||||
@ -62,14 +61,9 @@ namespace CppJieba
|
|||||||
{
|
{
|
||||||
cut(left, right, res);
|
cut(left, right, res);
|
||||||
}
|
}
|
||||||
TransCode::encode(right, right + 1, oneword);
|
res.resize(res.size() + 1);
|
||||||
res.push_back(oneword);
|
TransCode::encode(right, right + 1, res.back());
|
||||||
right ++;
|
left = right + 1;
|
||||||
left = right;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
right ++;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if(left != right)
|
if(left != right)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user