C++ 矢量大小返回零

C++ Vector size is returning zero

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

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

上的 g++ 编译器上

容量() return是预期的结果。

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;
    }

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));
}

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

之后使用索引运算符操作 vector 是一种糟糕的风格,您应该只使用 retrieve/edit 已经定义为 "in the container" 的元素。与其他语言相比,索引运算符不会自动将元素添加到您的容器中。在您的情况下,您只是在操纵一些保留的内存。注意:"checked" 访问方法 at() 会在您的情况下抛出异常。

v1.reserve(30);

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

v1.resize(30);

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

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

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

另请查看 documentation 以了解 std::vector 成员函数的确切作用。