std::string を渡さずに変更する関数を作成したいのですが、
void changeStr(std::string &str)
{
str = "Hello World!";
}
ではなく、std::strings の固定サイズの配列全体です (関数はまったく同じことを行います: 配列内の各スペースにいくつかの特定の文字列を属性付けます)。しかし、どの構文が適切なのかわかりません...
C++ を使用しているので、参照による参照のコレクションではなく、参照による値のコレクションを渡したいと思うでしょう。これを達成する最も簡単な方法は、std::vector<T>
void changeStr(std::vector<std::string>& collection) {
if (collection.size() > 0) {
collection[0] = "hello world";
}
}
1 つのアプローチは、配列のサイズであるstd::array<std::string, N>
場所への参照を渡すことです。N
関数テンプレートを使用して次のことを推測できますN
。
#include <array>
template <size_t N>
void changeStr(std::array<std::string, N>& strings)
{
// access strings[i] for i >= 0 and i < N
}
または、関数テンプレートを使用して、固定サイズのプレーン配列を渡すこともできます。
template<size_t N >
void changeStr( std::string (&strings)[N] )
{
// access strings[i] for i >= 0 and i < N
}
ここでは、関数が異なるサイズの固定サイズの配列を操作できるようにするために、テンプレートが必要であることに注意してください。テンプレートを使用すると、実際の値を気にせずにサイズ情報を保持できます。
方法は次のとおりです。
//Change the 10 to whatever size you'd like
void changeStr(std::string (&str)[10]) {
}
もちろん、これは静的サイズのためのものですが、他の答えは、必要なものを柔軟に達成するためのより良い方法です。