-1

たとえば、次のコードを見てみましょう。forループで使用している配列の名前として文字列 "name"を使用したかったのですが、代わりに文字列"array"を受け取りました。この文字列を配列の名前に使用するにはどうすればよいですか?

#include <iostream>
#include <string>
using namespace std;

int main() {
  int array[3];
  array[0] = 1;
  array[1] = 2;
  array[2] = 3;
  string name = "array";
  int i;
  for (i = 0; i < 3; i++) {
    cout << name[i] << endl;
  }
}
4

1 に答える 1

5

私のコメントを回答に拡張します。

C++ にはリフレクションがありません。識別子を含む文字列を使用して変数 (またはその他のもの) を参照する一般的な方法はありません。

ただし、文字列などのキーに基づいてデータを取得するために使用できるデータ構造があります。あなたの場合、次のようなことができます:

#include <iostream>
#include <map>
#include <string>
#include <vector>

int main() {
  std::map<std::string, std::vector<int> > allArrays;  // mapping strings to vectors of ints
  allArrays["array"].push_back(1);  // fill vector stored under key "array"
  allArrays["array"].push_back(2);
  allArrays["array"].push_back(3);

  // another way:
  std::vector<int> &vec = allArrays["another_array"];
  vec.push_back(-1);
  vec.push_back(-2);
  vec.push_back(-3);

  std::string name = "array";

  for (size_t i = 0; i < allArrays[name].size(); ++i) {
    std::cout << allArrays[name][i] << '\n';  //not using endl - no need to flush after every line
  }
}
于 2013-03-23T12:59:48.600 に答える