2010-12-26 61 views
18

Làm cách nào để tìm kích thước của véc tơ 2 chiều? Cho đến nay tôi có đoạn mã sau không biên dịch.C++/Kích thước của một vector 2d

#include <iostream> 
#include <vector> 

using namespace std; 

int main() 
{ 

    vector < vector <int> > v2d; 

    for (int x = 0; x < 3; x++) 
    { 
     for (int y = 0; y < 5; y++) 
     { 
      v2d.push_back(vector <int>()); 
      v2d[x].push_back(y); 
     } 
    } 

    cout<<v2d[0].size()<<endl; 
    cout<<v2d[0][0].size()<<endl; 

    return 0; 
} 

Trả lời

26

Để có được kích thước của v2d, chỉ cần sử dụng v2d.size(). Đối với kích thước của mỗi véc tơ bên trong v2d, sử dụng v2d [k] .size().

Lưu ý: để nhận được toàn bộ kích thước của v2d, tổng hợp kích thước của mỗi véc tơ riêng lẻ, vì mỗi vectơ có kích thước riêng.

8

vector<vector<int>> không có kích thước toàn bộ vì mỗi vectơ trong đó có kích thước độc lập. Bạn cần tổng hợp kích thước của tất cả các vectơ chứa.

int size = 0; 
for(int i = 0; i < v2d.size(); i++) 
    size += v2d[i].size(); 
+1

Hãy nhớ rằng các không gian sợ hãi! 'vector >', không phải 'vector >' – marcog

+0

@marcog: Trình biên dịch của bạn bao nhiêu tuổi? Tôi khá chắc chắn rằng không cần thiết vì C++ 98. – Puppy

+1

Yêu cầu bồi thường cho không gian chỉ được giảm xuống trong C++ 0x. Rời bỏ nó là một lỗi biên dịch sử dụng GCC. Xem http://ideone.com/mGdWb – marcog

9

Bạn đã gặp một số lỗi trong mã của mình, mã mà tôi đã sửa và nhận xét bên dưới.

vector < vector <int> > v2d; 

for (int x = 0; x < 3; x++) 
{ 
    // Move push_back() into the outer loop so it's called once per 
    // iteration of the x-loop 
    v2d.push_back(vector <int>()); 
    for (int y = 0; y < 5; y++) 
    { 
     v2d[x].push_back(y); 
    } 
} 

cout<<v2d.size()<<endl; // Remove the [0] 
cout<<v2d[0].size()<<endl; // Remove one [0] 

v2d.size() trả về số lượng vectơ trong vector 2D. v2d[x].size() trả lại số lượng vectơ trong "hàng" x. Nếu bạn biết vector là hình chữ nhật (tất cả "hàng" có cùng kích thước), bạn có thể nhận được tổng kích thước với v2d.size() * v2d[0].size(). Nếu không, bạn cần phải lặp qua các "hàng":

int size = 0; 
for (int i = 0; i < v2d.size(); i++) 
    size += v2d[i].size(); 

Như một sự thay đổi, bạn cũng có thể sử dụng iterators:

int size = 0; 
for (vector<vector<int> >::const_iterator it = v2d.begin(); it != v2d.end(); ++it) 
    size += it->size(); 
Các vấn đề liên quan