Поэтому у меня есть следующий код:PRINTF и C++ строки
#include <iostream>
#include <vector>
#include <string>
using namespace std;
int main() {
vector<string> strs;
strs.push_back("happy");
const string& a1 = strs[0];
strs.push_back("birthday");
const string& a2 = strs[1];
strs.push_back("dude");
const string& a3 = strs[2];
printf("%s\n", a1.c_str());
return 0;
}
которая довольно проста, но она не работает. printf ничего не печатает. Это печать, если я изменить его на:
const string& a1 = strs[0].c_str();
может кто-то пожалуйста объяснить поведение этого.
прочитать документ на [ 'push_back'] (http://en.cppreference.com/w/cpp/ контейнер/вектор/push_back), в частности, часть о: «Если новый' size() 'больше, чем' capacity() ', то все итераторы ** и ссылки ** (включая итератор прошедшего конца) недействительны «. – WhozCraig
Если вы не хотите, чтобы ваши ссылки были недействительными, зарезервируйте место заранее, например. 'Strs.reserve (16); // зарезервируем место для 16 элементов'. – vsoftco