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