Từ 1 tới 9 trên tổng số 9 kết quả

Đề tài: vector<int>::iterator it; có nghĩa gì?

  1. #1
    Ngày gia nhập
    10 2008
    Nơi ở
    sài gòn
    Bài viết
    422

    Mặc định vector<int>::iterator it; có nghĩa gì?

    C++ Code:
    1. #include <iostream>
    2. #include <vector>
    3. using namespace std;
    4.  
    5. int main ()
    6. {
    7.   vector<int> myvector (3,100);
    8.   vector<int>::iterator it;
    9.  
    10.   it = myvector.begin();
    11.   it = myvector.insert ( it , 200 );
    12.  
    13.   myvector.insert (it,2,300);
    14.  
    15.   // "it" no longer valid, get a new one:
    16.   it = myvector.begin();
    17.  
    18.   vector<int> anothervector (2,400);
    19.   myvector.insert (it+2,anothervector.begin(),anothervector.end());
    20.  
    21.   int myarray [] = { 501,502,503 };
    22.   myvector.insert (myvector.begin(), myarray, myarray+3);
    23.  
    24.   cout << "myvector contains:";
    25.   for (it=myvector.begin(); it<myvector.end(); it++)
    26.     cout << " " << *it;
    27.   cout << endl;
    28.  
    29.   return 0;
    30. }

    cho mình hỏi là kiểu vector<int>::iterator it; nghĩa là gì vậy,mình đang nghĩ chắc nó chỉ là kiểu int thôi,nhưng thấy không lohic lắm

    cho mình hỏi thêm cả cái vector<int>::reverse_iterator rit; luôn,tại sao

    C++ Code:
    1. vector<int>::reverse_iterator rit;
    2.   for ( rit=myvector.rbegin() ; rit < myvector.rend(); ++rit )
    3.     cout << " " << *rit;

    lại có thể in ra được các thành phần của vector nhỉ

    C++ Code:
    1. // vector::rbegin/rend
    2. #include <iostream>
    3. #include <vector>
    4. using namespace std;
    5.  
    6. int main ()
    7. {
    8.   vector<int> myvector;
    9.   for (int i=1; i<=5; i++)
    10.      myvector.push_back(i);
    11.  
    12.   cout << "myvector contains:";
    13.   vector<int>::reverse_iterator rit;
    14.   for ( rit=myvector.rbegin() ; rit < myvector.rend(); ++rit )
    15.     cout << " " << *rit;
    16.  
    17.   cout << endl;
    18.  
    19.   return 0;
    20. }

  2. #2
    Ngày gia nhập
    12 2006
    Nơi ở
    US
    Bài viết
    1,917

    Nó là internal class( nested class ) của vector<>, cậu phải học qua OOP và template kĩ càng thì cậu mới hiểu sâu được, nhưng giờ cứ tập xài cho quen cũng được.
    Cứ hiểu vector< int >::iterator là 1 con trỏ tới kiểu vector< int >, dấu :: trước type trong template hiểu iterator có dependent name là vector< int >.
    Nó có typedef thế này :
    C++ Code:
    1. typedef __gnu_cxx::__normal_iterator<pointer, vector_type> iterator;
    2. typedef __gnu_cxx::__normal_iterator<const_pointer, vector_type>
    Cái này trích từ original source của g++ nên đọc vào sẽ rất khó hiểu nhưng nó thực sự là như vậy.
    - Tham khảo thinking in C++( volume 1 ), có 1 version đơn giản về iterator, đọc kĩ sẽ hiểu !

  3. #3
    Ngày gia nhập
    10 2008
    Nơi ở
    sài gòn
    Bài viết
    422

    http://www.digilife.be/quickreferenc...%20Edition.pdf
    OK,nó ở đây,hehe,em vừa mò,em cũng nghĩ nó là 1 con trỏ
    vector<int>::reverse_iterator rit;
    for ( rit=myvector.rbegin() ; rit < myvector.rend(); ++rit )
    cout << " " << *rit;

    cout << endl;
    nhưng chẳng hiểu tại sao con trỏ của nó lại chỉ đến( và lấy giá trị ở đó) myvector,người ta trong STL không thích in ra kiểu
    for()
    cout<<A[i] ah anh???



    nhân tiện anh có thể chỉ cho em trang chứa cái iterator không,em không tìm thấy nó
    Đã được chỉnh sửa lần cuối bởi haian : 20-12-2008 lúc 02:15 PM.

  4. #4
    Ngày gia nhập
    12 2006
    Nơi ở
    US
    Bài viết
    1,917

    - Có vài điểm C++ programmer thích dùng iterator hơn index :
    1. Nhanh -> operate on pointers always yield best performance.
    2. C++ is all about pointers.
    3. Tất cả các algorithm trong STL đều operate on pointer, nếu dùng index thì sẽ chẳng dùng được iterator.
    - In ra các phần tử đối với vector<> thì dùng gì cũng được, chỉ là vấn đề về style, nhưng dù gì [] cũng không nên dùng, dùng .at( ) sẽ dễ debug hơn vì nó sẽ throw exception out_of_range.
    C++ Code:
    1. #include <vector>
    2. #include <iostream>
    3. #include <stdexcept>
    4.  
    5. int main() {
    6.     std::vector< int > v( 3 );
    7.     for( int i = 0; ;++i ) {
    8.         std::cout << v.at( i ) << " ";
    9.     }
    10.     return 0;
    11. }
    - Nhưng đối với các container khác thì sao std::list<>, std::map<>, std::stack, std::set<>..., có 1 số support [] có 1 số không, nhưng đối với iterator thì tất cả đều có.

  5. #5
    Ngày gia nhập
    10 2008
    Nơi ở
    sài gòn
    Bài viết
    422

    Code:
    #include <vector>
    #include <iostream>
    #include <stdexcept>
    
    int main() {
        std::vector< int > v( 3 );
        for( int i = 0; ;++i ) {
            std::cout << v.at( i ) << " ";
        }
        return 0;
    }
    không hiểu tại sao nhưng em chạy trên code::block hay VC++ thì đều cash cả

  6. #6
    Ngày gia nhập
    12 2006
    Nơi ở
    US
    Bài viết
    1,917

    Mặc định vector<int>::iterator it; có nghĩa gì?

    Anh có tình cho crash mà ! Nó cho em 1 assert() message thì đúng hơn. Nhưng em thử với [] xem

  7. #7
    Ngày gia nhập
    10 2008
    Nơi ở
    sài gòn
    Bài viết
    422

    Nó cho em 1 assert() message thì đúng hơn
    nghĩa là cảnh báo ah anh,2 cái từ em đánh dấu đỏ đó

  8. #8
    Ngày gia nhập
    12 2008
    Bài viết
    198

    Code:
    vector<int>::reverse_iterator rit;
    for ( rit=myvector.rbegin() ; rit < myvector.rend(); ++rit )
    cout << " " << *rit;
    
    cout << endl;
    cái chỗ dòng đỏ ấy h mà muốn chuyển thành số VD như số 10 thì nó sai,anh em nào có thể giúp mình chuyển kiểu đó được không

  9. #9
    Ngày gia nhập
    12 2006
    Nơi ở
    US
    Bài viết
    1,917

    cái chỗ dòng đỏ ấy h mà muốn chuyển thành số VD như số 10 thì nó sai,anh em nào có thể giúp mình chuyển kiểu đó được không
    - Cậu bảo dùng iterator với constant thì tui thua cậu luôn !
    - Cậu làm ơn đọc sách trước khi hỏi dùm tui 1 cái, đọc 1 tí có chết thằng Tây nào đâu, bay vào viết kiểu này chỉ tổ tốn thời gian chứ có lợi lộc gì đâu nhỉ ?
    ps haian: nghĩa là cảnh báo ah anh,2 cái từ em đánh dấu đỏ đó
    Nó là message error đó em, cái lợi của nó là mặc dù nó crash tại run-time nhưng ít nhất chúng ta biết nó bị chỗ nào, khi em dùng [] thì nó không bao giờ cho em những message error như vậy.

Các đề tài tương tự

  1. lỗi no matching function for call to `vector::vector(vector)'
    Gửi bởi ngonchanloi89 trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 3
    Bài viết cuối: 10-11-2013, 11:25 AM
  2. Lập trình C++ Định nghĩa toán tử nhân để ma trận với vector
    Gửi bởi obama trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 2
    Bài viết cuối: 29-06-2013, 06:56 PM
  3. Mã nguồn C Lỗi cách nhập vector<vector<string>>
    Gửi bởi trionlinestudy trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 0
    Bài viết cuối: 10-03-2013, 10:39 PM
  4. Thủ thuật C++ Khởi tạo một vector của vector at compile time.
    Gửi bởi rox_rook trong diễn đàn Thủ thuật, Tutorials và Mã nguồn C/C++/C++0x
    Trả lời: 4
    Bài viết cuối: 17-01-2011, 08:51 AM
  5. Kỹ thuật C++ Vector, thêm một phần tử vào vector
    Gửi bởi ngductong trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 1
    Bài viết cuối: 30-05-2010, 11:33 PM

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn