如何找到向量数组的大小?或者阵列中存在的矢量的数量



在C++中

如果存在一个对象a,它是一个数组vector<int> a[],我如何获得a的大小或者,至少,能够遍历数组

我希望能够遍历这个所谓的2D矩阵中的所有元素。不知道如何实现for循环。

for(int i = 0; i < ???; i++){
}

a.size()在此不起作用。

这取决于情况

如果循环与声明数组的范围相同,则可以直接确定数组的大小,例如:

{
...
vector<int> a[SomeSize];
for(size_t i = 0; i < SomeSize; ++i){ // OK!
...
}
for(size_t i = 0; i < sizeof(a) / sizeof(*a); ++i){ // OK!
...
}
for(size_t i = 0; i < std::size(a); ++i){ // OK!
...
}
for(auto iter = std::begin(a); iter != std::end(a); ++iter){ // OK!
...
}
for(auto &elem : a){ // OK!
...
}
...
}

另一方面,如果数组被传递给一个函数,那么只有当数组是通过引用传递的,或者如果大小是作为一个单独的参数明确传递的,才有可能确定数组的大小,例如:

void func1(vector<int> a[]) // same as 'vector<int>* a'
{
for(size_t i = 0; i < sizeof(a) / sizeof(*a); ++i){ // NOPE, can't work!
...
}
for(size_t i = 0; i < std::size(a); ++i){ // NOPE, can't work!
...
}
for(auto iter = std::begin(a); iter != std::end(a); ++iter){ // NOPE, can't work!
...
}
for(auto &elem : a){ // NOPE, can't work!
...
}
}
void func2(vector<int> *a, int size)
{
for(size_t i = 0; i < size; ++i){ // OK!
...
}
for(auto iter = a; iter != a + size; ++iter){ // OK!
...
}
for(auto iter = std::begin(a); iter != std::end(a); ++iter){ // NOPE, can't work!
...
}
for(auto &elem : a){ // NOPE, can't work!
...
}
*/
}
template<size_t N>
void func3(vector<int> (&a)[N])
{
for(size_t i = 0; i < N; ++i){ // OK!
...
}
for(size_t i = 0; i < sizeof(a) / sizeof(*a); ++i){ // OK!
...
}
for(size_t i = 0; i < std::size(a); ++i){ // OK!
...
}
for(auto iter = std::begin(a); iter != std::end(a); ++iter){ // OK!
...
}
for(auto iter = a; iter != a + N; ++iter){ // OK!
...
}
for(auto &elem : a){  // OK!
...
}
}
vector<int> a[SomeSize];
func1(a);
func2(a, SomeSize);
func2(a, std:size(a));
func3(a);

要定义二维整数矩阵,需要编写

std::vector< std::vector< int > > v2d;

要穿过这个,你需要

for( auto& v1d : v2d )
for( int i : v1d )

我不知道它是否仍然有用。但由于你只需要遍历它来解决gfg问题,你只需要访问你需要的索引位置,只要你的解决方案是正确的,你就不会越界。

例如,如果给你一个相邻列表,一个图的vector<int> adj[]和顶点数V,你可以访问任何你需要的索引,它就会在那里。您不需要遍历整个范围。这只是关于GFG问题的制作方式。

相关内容