首页 > 解决方案 > 逐元素初始化字符串会导致 TLE,但这种技术效果很好

问题描述

我只是在解决字符串问题。我不得不用'a'初始化整个字符串。字符串 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');    

该解决方案被接受。而且我能够完全打印整个字符串。
为什么如此巨大的差异只是由不同的初始化技术引起的?

标签: c++stringinitialization

解决方案


string s;

声明一个大小为 0 的字符串。索引到此字符串[]中将调用未定义的行为。一个结果可能是 TLE。

您可以使用 size 初始化字符串n,并将所有元素初始化为相同的字符:

string s(n,'a'); 

如果你想使用循环,你可以这样做:

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

推荐阅读