如何在运行时确定矢量大小?

时间:2011-12-17 12:03:00

标签: c++ vector stdvector c++-standard-library

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

例如

输入:25 //显示矢量大小

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

4 个答案:

答案 0 :(得分: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

我猜您原始帖子中的示例代码段至少包含一个拼写错误,您不要通过编写以下内容声明std::vector<int> N元素。

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

vector<int> data[N];

要创建vector并从头开始插入N元素:

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

答案 1 :(得分: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的大小(用作存储在其中的元素数量)仅在运行时定义。

答案 2 :(得分:3)

你快到了:

使用

vector <int> data(N); 

而不是

vector <int> data[N];

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

答案 3 :(得分:2)

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

你可以写

vector<int> data;

然后每次你想要元素到向量的末尾就行了

data.push_back(<some integer>)

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