如何在运行时确定向量大小

How can one determine vector size at run time?

本文关键字:向量 运行时      更新时间:2023-10-16

在运行时,可以确定vector的大小吗?

例如

input: 25//显示向量大小

  code :
        int N ;
        cin << N ;
        vector <int> data[N];

您可能感兴趣的两个方法:

  • std::vector<T>::size将返回vector中元素的个数

  • std::vector<T>::capacity将返回vector已分配内存的元素数

<

例子片段/strong>

  std::vector<int> v;
  for (int i =0; i < 25; ++i)
    v.push_back (i);
  v.reserve (100); 
  std::cerr << "Elements: " << v.size     () << std::endl;
  std::cerr << "Capacity: " << v.capacity () << std::endl;

输出
Elements: 25
Capacity: 100

我猜你在原始帖子中的示例片段至少包含一个错字,你不通过写下面的N元素来声明std::vector<int>

你写的是数据是一个vector<int>大小为N的数组,如果在编译时N是已知的(或者如果在编译器中存在可变长度数组扩展),它将编译。

vector<int> data[N];

创建vector并使其从一开始就插入N元素:

std::vector<int> data (N);

您使用vector(可能)错误的方式…这样,您就定义了一个包含N个向量的c风格数组(顺便说一下,该语法不是标准的,因为N需要在编译时已知),而您可能想要定义包含N元素的vector,这是这样完成的:

vector<int> data(N);

(调用vector的单参数构造函数,构造一个默认初始化的数组N elements long)

要在运行时获得它的大小1你只需要调用它的方法size():

cout<<"The vector contains "<<data.size()<<" elements.n"

    实际上,在编译时询问它的大小是没有意义的,因为vector的大小(存储在其中的元素数量)只在运行时定义。

你就快成功了:

使用

vector <int> data(N); 

代替

vector <int> data[N];

如果您需要将向量的所有元素设置为零以外的值,例如-1,则使用vector <int> data(N, -1);

Matteo是对的。只是为了补充他的答案。您不一定需要在运行时定义向量大小。我假设你正在使用c++。

你可以直接写

vector<int> data;

然后每次你想把元素移到vector的末尾时只需执行

data.push_back(<some integer>)

它不像数组,你需要在使用之前给它们一个大小。向量可以动态地增长和缩小。因此,您不需要关心内存分配。它由编译器和vector类在运行时处理。