Инициализация строки поэлементно вызывает TLE, но этот метод работает нормально - PullRequest
1 голос
/ 05 августа 2020

Я как раз решал задачу по струнам. Мне пришлось инициализировать всю строку буквой «а». Размер строки n может достигать 10 ^ 5. Я использовал метод грубой силы для инициализации каждого элемента циклами.

 string s;  
 for(int i = 0;i < n;i++)s[i]='a';        

Когда я собирался распечатать строку, используя

cout<<s;  

Ничего не напечатано! Чтобы напечатать строку, мне пришлось распечатать ее поэлементно: -

 for(int i=0;i<n;i++)cout<<s[i];   

Кроме того, этот метод дал TLE.

Но, когда я инициализировал строку, как это

string s(n,'a');    

решение принято. И я вообще смог напечатать целую строку. Почему такая огромная разница вызвана просто разными методами инициализации?

1 Ответ

1 голос
/ 05 августа 2020
string s;

объявляет строку размера 0. Индексирование этой строки с помощью [] вызовет неопределенное поведение. Одним из результатов может быть TLE.

Вы можете инициализировать строку размером n и инициализировать все элементы одним и тем же char:

string s(n,'a'); 

Если вы хотите использовать al oop, можно:

string s;
for(int i = 0;i < n;i++) s += 'a';
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...