各要素に 1 バイトが関連付けられた、双方向にリンクされたリストがあるとします。ウィキペディアには優れたビジュアルがあります。数字が 16 進数であるふりをします。
さて、文字列の最後のノード (この例では37
ノード) へのポインタを指定して、リストから文字列を作成する単純な (「すぐにわかる」) 方法は次のとおりです。
using std::string;
string node::makeString()
{
return this->prev->makeString() + this->data;
}
目標は文字列"\0x12\0x99\0x37"
です。ただし、この関数では、作成中の文字列を何度も再割り当てする必要があり、多くの関数呼び出しのオーバーヘッドが必要です (末尾呼び出しを最適化することはできません)。間違いなく、私が気づいていない他の非効率性があります。
より良い方法はありますか?もちろん、理論上の時間の複雑さを最小限に抑えることだけを考えているわけではありません。私は実際に最速になる方法を見つけようとしています。