5

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

例如

input : 25 // 显示向量大小

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

4 回答 4

13

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

示例片段

  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

我猜您在原始帖子中的示例片段至少包含一个错字,您没有通过编写以下内容来声明 a std::vector<int>with元素。N

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

vector<int> data[N];

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

std::vector<int> data (N);
于 2011-12-17T12:06:44.063 回答
9

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

vector<int> data(N);

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

要在运行时1获取它的大小,您只需调用它的方法size()

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

  1. 实际上,在编译时询问它的大小甚至没有意义,因为vector的大小(旨在存储在其中的元素数量)仅在运行时定义。
于 2011-12-17T12:05:49.697 回答
3

你快到了:

利用

vector <int> data(N); 

代替

vector <int> data[N];

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

于 2011-12-17T12:17:41.373 回答
2

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

你可以写

vector<int> data;

然后每次你想元素到向量的末尾就做

data.push_back(<some integer>)

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

于 2011-12-17T12:12:36.370 回答