STLのlistコンテナにインデックス値でアクセスするには? – プログラミング – Home

STLのlistコンテナにインデックス...
 
通知
すべてクリア

[解決済] STLのlistコンテナにインデックス値でアクセスするには?


Tome
 Tome
(@Tome)
ゲスト
結合: 18年前
投稿: 36
Topic starter  

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;
}


引用未解決
トピックタグ
Blue
 Blue
(@Blue)
ゲスト
結合: 20年前
投稿: 1467
 

list的な使い方(挿入、削除)よりvector的な使い方(インデックスでアクセス、末尾に追
加)gが多いならば、いっそのことlistよりもvectorにしたほうがよさそうなんですが、
どうでしょうか?


返信引用
dairygoods
 dairygoods
(@dairygoods)
ゲスト
結合: 23年前
投稿: 1421
 

<algorithm> に std::advance というのがあります。
中身は GetIndexHoge と同じようなものです。

しかし、インデクスアクセスの方が多いなら、
vector 等のランダムアクセス可能なコンテナを
使った方が良いと思いますが。


返信引用
Tome
 Tome
(@Tome)
ゲスト
結合: 18年前
投稿: 36
Topic starter  

> list的な使い方(挿入、削除)よりvector的な使い方(インデックスでアクセス、末尾に追
> 加)gが多いならば

insert,eraseは頻繁に使ってる感覚があるので、list的な使い方をするほうが多いかと思います。
vectorにするとinsertの代わりを作るのがさらに大変そう(?)なので出来ればlistのままで行き
たいです。
よろしくおねがいします。


返信引用
Tome
 Tome
(@Tome)
ゲスト
結合: 18年前
投稿: 36
Topic starter  

> <algorithm> に std::advance というのがあります。
> 中身は GetIndexHoge と同じようなものです。

ありがとうございます。
こんなのがあったとは・・・・

> ちょくちょくリストにインデックスでアクセスしたくなる場合があるのですが、そもそもこの状況
> になること事態間違いがあるのでしょうか?

この文章で誤解を招いたようですね。すいません。

挿入削除を使うことがほとんどで、たまにインデックスアクセスが必要な状況に対応できる複数要素
コンテナがほしい時がちょくちょくあるという意味です。(余計意味不明にw


返信引用
Ban
 Ban
(@ban)
Prominent Member
結合: 5年前
投稿: 776
 

「挿入削除」の位置が先頭/末尾に多いなら、std::dequeなんてのも。
vectorよりは向いている可能性がありそう。

# 理屈で考えて、リンクリスト構造にインデクスを振ったら、
# 追加削除の度にインデクス変更が発生して大変ですよね…。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました