我想查看size()
数组中rows
或std::vector()
的数量。
我有像
这样的矢量std::vector<int> vec[3];
vec.size()
不适用于上述矢量声明。
答案 0 :(得分:8)
至于为什么vec.size()
不起作用,因为vec
不是矢量,它是数组(矢量), C ++中的数组不是对象(在OOP意义上它们不是类的实例),因此没有成员函数。
如果您想在执行3
时获得结果vec.size()
,那么您必须使用例如std::array<std::vector<int>, 3> vec;
std::cout << "vec.size() = " << vec.size() << '\n'; // Will output 3
std::array
:
std::array
或者,如果您没有std::vector<std::vector<int>> vec(3);
std::cout << "vec.size() = " << vec.size() << '\n'; // Will output 3
,则使用向量向量并通过调用正确的constructor来设置大小:
getTabIndex: function(tab) {
var index = 0;
tab.up('#mainTabPanel').getItems().each(function(item) {
if (tab === item) {
return false;
}
if (item.tab) {
index++;
}
});
return index;
}
答案 1 :(得分:2)
std::vector<int> vec[3];
中没有固有的东西来说明第一个或第二个索引操作构成的位置&#34;行&#34; vs.&#34; columns&#34; - 作为一名程序员,这完全取决于你自己的观点。也就是说,如果您认为这有3行,您可以使用...
std::extent<decltype(vec)>::value
...您需要#include <type_traits>
。请参阅here。
无论如何,std::array<>
专门用于提供更好,更一致的界面 - 并且已经熟悉std::vector
:
std::array<std::vector<int>, 3> vec;
...use vec.size()...
(如果您希望模板化代码同时处理向量和数组,则一致性尤为重要。)
答案 2 :(得分:1)
尝试
int Nrows = 3;
int Ncols = 4
std::vector<std::vector<int>> vec(Nrows);
for(int k=0;k<Nrows;k++)
vec[k].resize(Ncols);
...
auto Nrows = vec.size();
auto Ncols = (Nrows > 0 ? vec[0].size() : 0);
答案 3 :(得分:0)
使用sizeof(vec[0])/sizeof(vec)
或sizeof(vec)/sizeof(vector<int>)