vectorコンテナの []演算子や at などのようなランダムアクセス関数はlistには用意されていない
のでしょうか?
ちょくちょくリストにインデックスでアクセスしたくなる場合があるのですが、そもそもこの状況に
なること事態間違いがあるのでしょうか?
一応今のところ、下記のようなプログラムでアクセスしてますが、毎度このプログラムを書くのは正
直かなりめんどいです。
なんとかならないでしょうか?
よろしくおねがいします。
Hoge *GetIndexHoge( int index )
{
int i = 0;
list<Hoge>::iterator itr = m_Hoge.begin();
while( itr != m_Hoge.end() )
{
if( i == index )
{
break;
}
i++;
++itr;
}
if( itr != m_Hoge.end() )
{
return &(*itr);
}
return NULL;
}
list的な使い方(挿入、削除)よりvector的な使い方(インデックスでアクセス、末尾に追
加)gが多いならば、いっそのことlistよりもvectorにしたほうがよさそうなんですが、
どうでしょうか?
<algorithm> に std::advance というのがあります。
中身は GetIndexHoge と同じようなものです。
しかし、インデクスアクセスの方が多いなら、
vector 等のランダムアクセス可能なコンテナを
使った方が良いと思いますが。
> list的な使い方(挿入、削除)よりvector的な使い方(インデックスでアクセス、末尾に追
> 加)gが多いならば
insert,eraseは頻繁に使ってる感覚があるので、list的な使い方をするほうが多いかと思います。
vectorにするとinsertの代わりを作るのがさらに大変そう(?)なので出来ればlistのままで行き
たいです。
よろしくおねがいします。
> <algorithm> に std::advance というのがあります。
> 中身は GetIndexHoge と同じようなものです。
ありがとうございます。
こんなのがあったとは・・・・
> ちょくちょくリストにインデックスでアクセスしたくなる場合があるのですが、そもそもこの状況
> になること事態間違いがあるのでしょうか?
この文章で誤解を招いたようですね。すいません。
挿入削除を使うことがほとんどで、たまにインデックスアクセスが必要な状況に対応できる複数要素
コンテナがほしい時がちょくちょくあるという意味です。(余計意味不明にw
「挿入削除」の位置が先頭/末尾に多いなら、std::dequeなんてのも。
vectorよりは向いている可能性がありそう。
# 理屈で考えて、リンクリスト構造にインデクスを振ったら、
# 追加削除の度にインデクス変更が発生して大変ですよね…。