在运行时,可以确定vector
的大小吗?
例如
输入:25 //显示矢量大小
code :
int N ;
cin << N ;
vector <int> data[N];
答案 0 :(得分:13)
您可能感兴趣的两种方法:
std::vector<T>::size
将返回向量中的元素数。
std::vector<T>::capacity
将返回向量为其分配内存的元素数。
示例摘录
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"
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
类处理。