0

ベクトルに長い文字列を格納する必要があるとします。ベクトルとして宣言できます。ただし、より良いアプローチは、実際の文字列ではなく、それらの文字列へのポインタを格納することです。

したがって、私の宣言はベクトルのようなものである必要があり、単純に次のようなことを行います。

LOOP
//Accept String from a file in myString
vector<string *> v1;
string * sample = &myString;
v1.push_back(sample);
END LOOP

これは適切ですか、それともこれを達成するためのより良い方法が存在しますか?私はここで完全に間違っているかもしれません。

4

2 に答える 2

9

文字列へのポインタを格納する理由はありません。 std::stringとにかく「長い」文字列にはヒープに割り当てられたメモリを使用するため、コンテナにポインタを格納することで得られる唯一のことは、メモリを自分で管理するという頭痛の種です。

一方、複数の場所にこれらの長い文字列のコピーが必要な場合は、ベクトル内の文字列への共有ポインタを保持できます。

std::vector<std::shared_ptr<std::string>>;
于 2012-08-02T14:37:17.577 に答える
4

ただし、より良いアプローチは、実際の文字列ではなく、それらの文字列へのポインタを格納することです。

私はそれを本当に疑っています。ポインタを使用する正当な理由がない限り、std::vector<std::string>代わりに使用してください。

于 2012-08-02T14:38:20.127 に答える