C ++向量大小返回零

时间:2015-07-12 21:32:48

标签: c++ vector standard-library

C ++标准库中向量的size()返回零 size()应该返回当前的元素数。

我的代码有问题吗?或者它是函数中的错误? 它发生在我的PC上的MinGW编译器和Linux VW上的g ++编译器

capacity()返回预期结果。

using namespace std;

    bool binarySearch(vector<int>& nums, int k) 
    {
    int low, high, mid;

        low = 0;
        high = nums.size();
        mid = (low+high)/2;
        printf("low %d high %d mid %d  \n", low, high, mid);

        return true;
    }

    int main()
    {
        int result;
        vector<int> v1;
        v1.reserve(30);
        v1[0] = 1;
        for (int index = 1; index < 30; index++)
        {
            v1[index] = v1[index-1] + (rand()%10);
        }

        bool flag = binarySearch(v1, 57);

        return 0;
    }

3 个答案:

答案 0 :(得分:3)

使用v1.push_back(...)添加新元素。目前,您只需在vector中保留内存 - 这不会改变大小,只会改变其容量。

之后使用索引运算符操作vector是错误的样式,您应该只检索/编辑容器中已定义为&#34;的元素&#34;。与其他语言相比,索引运算符不会自动向容器添加元素。在你的情况下,你只是操纵一些保留的内存。注意:&#34;已检查&#34;访问方法at()会在您的案例中引发异常。

答案 1 :(得分:2)

v1.reserve(30);

不会更改vector中的元素数量,只是确保vector有足够的空间来保存30个元素而无需重新分配。使用

v1.resize(30);

更改为向量中的元素数量或使用

std::vector<int> v1(30);

初始化v1以包含30 int初始化为0。

另请查看documentation,了解std::vector成员函数的确切内容。

答案 2 :(得分:1)

reserve只是预先分配内存,它不会更改size。您可以省略reverse并使用

vector<int> v1(30);

或者,也许更好,您可以使用push_back

vector<int> v1;
v1.push_back(1);
for (int index = 1; index < 30; index++)
{
    v1.push_back(v1[v1.size()-1] + (rand()%10));
}