矢量调整奇怪行为的大小

vector resize strange behavior

本文关键字:调整      更新时间:2023-10-16

我有以下代码。有趣的是,如果我取消对 vector 的 resize() 的注释,它将为输入值 5 提供 10 个数字。我在 Windows xp 上使用带有 mingw 和 gcc 的 eclipse。迭代器不应该只针对 5 个元素吗?

#include <iostream>
#include <string>
#include <vector>
#include <map>
#include <set>
#include <algorithm>
//#include "stdio.h"
using namespace std;
template <typename T>
void print_coll(T t)
{
    typename T::iterator iter = t.begin();
    while (iter != t.end() )
    {
        cout << *iter << " ";
        ++iter;
    }
    cout << endl;
}
int main()
{
    int size;
    cin >> size;
    vector<int> numbers;
//    numbers.resize(size);
    for ( int i = 0 ; i < size; ++i ) {
        int r = (rand() % 10);
        numbers.push_back(r);
    }
    print_coll(numbers);
}

resize调整矢量的大小,为需要为新大小创建的每个项目插入默认值。你想要reserve.

numbers.resize(size);

这会将size 0 添加到向量中。

for ( int i = 0 ; i < size; ++i ) {
    int r = (rand() % 10);
    numbers.push_back(r);
}

这会向向量添加size随机值。

可能你想要reserve而不是resize. reserve不会更改矢量的"可见"大小,它只会更改矢量使用的存储的内部大小,resize更改"可见"大小。