C ++ Доступ к строке в векторе в векторе - PullRequest
0 голосов
/ 25 мая 2018

Я хочу получить доступ к строке в первой записи вектора внутри первой записи в другом векторе.Мой код:

typedef std::vector<std::string> DatabaseRow;
std::vector<DatabaseRow*> data;

//getting data from database 
//(dont need this for this example)

//then print first entry out
printf("%s.\n",dbresult.data[0][0].c_str());

Но тогда я получаю ошибку:

ошибка: 'class std :: vector, std :: allocator>, std :: allocator, std ::allocator>>> 'не имеет члена с именем' c_str '

Любое понимание, пожалуйста?

Ответы [ 2 ]

0 голосов
/ 25 мая 2018

Вы храните указатели на базы данных:

std::vector<DatabaseRow*> data;
                       ^ Pointer

Так что вам нужно будет получить к ним доступ, например:

(*dbresult.data[0])[0].c_str()

1. (*dbresult.data[0])  // Dereference the pointer
2. [0]                  // Access the internal Vector   
3. .c_str()             // Use the string

Или, сделайте лучше и не делайте этоуказатель, используйте его как фактический объект так, как он должен быть:

 std::vector<DatabaseRow> data;
0 голосов
/ 25 мая 2018
  • dbresult.data[0]: это std::vector<std::string>*.
  • *dbresult.data[0]: это std::vector<std::string>.
  • (*dbresult.data[0])[0]: это std::string.

Вот, пожалуйста:

(*dbresult.data[0])[0]

Но спросите себя:

  • Я уверен, что хочу сохранить указатели на векторы?
  • Я уверен, что хочу иметь двумерный массив вместо красивого Матрично-подобного линеаризованного массива ?
  • AM Я уверен, что хочу придерживаться C-подобных функций(std::printf) вместо сильного типа C ++ эквивалента (std::cout и др. )?
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...