vector<string>の関数を引数として渡す方法

[戻る]
あきら 2006/05/29(月) 23:51:14
こんばんわ、はじめまして。
vector<string>を引数として渡す方法を探しています。
過去ログも色々読み返したのですが、よく分からなかったので教えて下さい。

今現状のイメージはこんな感じです。

void sub(vector<string>*titles)
{
    string title;
    title = titles[0][0];  ← 実行結果:AAA
    title = titles[0][1];  ← 実行結果:BBB
    title = titles[0][2];  ← 実行結果:CCC
}
int _tmain(int argc, _TCHAR* argv[])
{
    vector<string>titles;
    titles.push_back("AAA");
    titles.push_back("BBB");
    titles.push_back("CCC");

    sub(&titles);
    return 0;
}

sub()内のstring変数への代入は
  title = *titles[0];

てっきりこうなると思ったのですが、コンパイルエラーで弾かれました。
上記のソースで値は正常に渡っていますが、どなたか理由と他に上手い方法があれば教
えて下さい。

宜しくお願いします。

あきら 2006/05/30(火) 00:07:24
[[解決]]
解決しました(汗

sub()内のtitlesはポインタになるので
    title = *titles[0];

とした場合、*によって先にvector自身を参照してしまい、コンパイルエラーとなってい
たようです。正しくは以下になります。

void sub(vector<string>*titles)
{
    string title;
    title = (*titles)[0];  ← 実行結果:AAA
    title = (*titles)[1];  ← 実行結果:BBB
    title = (*titles)[2];  ← 実行結果:CCC
}

昨日、散々悩んでたんですけど、ふと試したら...(苦笑)
スレ汚しすみませんでした。m(__)m

かずき 2006/05/30(火) 06:35:05
こういう使い方なら参照を使った方がいいと思いますよ。
間違いも少ないですし

void sub(vector<string> &titles)
{
    string title;
    title = titles[0];  ← 実行結果:AAA
    title = titles[1];  ← 実行結果:BBB
    title = titles[2];  ← 実行結果:CCC
}

επιστημη 2006/05/30(火) 09:27:59
イテレータ渡せばツブシが利きます

template<typename Iter>
void sub(Iter first, Iter last) {
  string title;
  while ( first != last ) {
    title = *first++;
    ...
  }
}

vector<string> vs;
list<string> ls;
string as[5];

sub(vs.begin(), vs.end());
sub(ls.begin(), ls.end());
sub(as, as+5);

古いスレッドには追加発言できません。