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
成员函数的确切作用。
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
成员函数的确切作用。