c ++ vector clear()不起作用

时间:2018-03-27 07:03:56

标签: c++ stl

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。但它不起作用。是什么原因?

3 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

你正在清除你的向量,移除所有元素,然后你似乎试图遍历它的前25个元素,即使它是空的。

你抛出std_out_of_range的原因是因为你试图访问它们不存在的元素。

如果您无法确保相关的矢量不会包含那么多元素,那么您几乎不应该通过已设定的次数循环访问某些内容。

如果你必须在你的向量中循环一定次数,至少要确保你的向量首先包含那么多元素。

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

在这种情况下,你的向量绝对不会有25个元素,因为你在循环之前清除了向量,但它更安全。