Только начинаю пробовать векторы и не понимаю почему в нем изменяется значения. Использую Qt 5.8.0.
В ходе for у vector'а сами перезаписываются значения
char *strS=new char[5];
std::vector <char*>yrus;
for(int i=0;i<10;i++){
sprintf (strS, "%d", i+1);//Занести в char strR значения int i+1
if(yrus.empty()){//Если вектор пустой занести strS
yrus.insert(yrus.end(),strS);
}
}
При выполненииyrus.insert(yrus.end(),strS); заносит 1 в пустой вектор
Но потом значения yrus[0] меняются вместе с strS
Как исправить, чтоб в векторе оставалась "1" в ходе выполнения цикла for?
При добавлении в вектор (кстати, делайте это не с помощью insert, а push_back)
у вас добавляется неизменный указатель strS, так что (все, если будут еще таковые) указатели в векторе одинаковы... А потом вы меняете содержимое в памяти в месте, куда он указывает. Еще раз - указатель остается тем же - меняется содержимое.
Вам надо или постоянно создавать новые указатели - типа
std::vector <char*>yrus;
for(int i=0;i<10;i++)
{
char *strS=new char[5];
sprintf (strS, "%d", i+1);//Занести в char strR значения int i+1
yrus.push_back(strS);
}
или, что лучше - работать со строками string.
std::vector<string> yrus;
for(int i=0;i<10;i++)
{
yrus.push_back(to_string(i+1));
}
В этих вариантах у вас первым элементом будет С-строка (или строка string) "1", которая не будет изменяться. Но при использовании C-строк вы должны потом во избежание утечек памяти самостоятельно освободить память для всех элементов вектора. В случае string это будет сделано автоматически при выходе вектора из области видимости.
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости