C++ 向量 clear() 不起作用

c++ vector clear() doen't work

本文关键字:不起作用 clear 向量 C++      更新时间:2023-10-16
string str;
vector<int> v(200,0);
getline(cin, str);
for (int i = 0 ; i < str.size(); i++) {
    v[str[i]-97]++;
}
for (int i = 0; i < 26; i++) {
    printf("%d ", v[i]);
}
v.clear();
cout << endl;
for (int i = 0; i < 26; i++) {
    printf("%d ", v[i]);
}

我想知道每个字母的数量和清除矢量v。但它不起作用。原因是什么?

调用v.clear((将向量调整为零元素。如果要将元素设置为特定值(此处为0(,请保持原始尺寸,则可以使用

v.assign(v.size(), 0);

将循环的最后一个更改为:

for (int i = 0; i < v.size(); i++) {
    printf("%d ", v[i]);
}

您正在清理矢量,删除所有元素,然后您似乎正在尝试通过它的前25个元素,即使它是空的。

您投掷std_out_of_range的原因是因为您正在尝试访问它们不存在的元素。

,如果您无法确保相关的向量不会有那么多元素,那么您几乎应该永远不要通过已经设置的次数循环。

如果您绝对必须循环浏览矢量限制次数,至少要确保您的向量将首先具有许多元素。

if (v.size() >= 25)
{
    for (int i = 0; i <= 25; i++) 
    {
        printf("%d ", v[i]); 
    }
}

在这种情况下,自从您在循环之前清除矢量以来,您的向量绝对不会有25个元素,但是它更安全。