U E D R , A S I H C RSS

STL/vector

1. vector

  • 배열을 λŒ€μ²΄ν• μˆ˜ μžˆλŠ” 자료ꡬ쑰.
  • include : vector
    ~cpp 
    #include <vector>
    

1.1. μ„ μ–Έκ³Ό 크기 작기

  • 일반적인 μ„ μ–Έ
    ~cpp 
    vector<int> ar;                  // intν˜• λ°μ΄ν„°λΌ λ„£μ„ vector μ»¨ν…Œμ΄λ„ˆ ar을 생성.
    ar.resize(10);                   // 10개둜 μž‘λŠ”λ‹€.
    vector<int>::iterator iter;      // λ‚΄λΆ€μ˜ 데이터듀을 μˆœνšŒν•˜κΈ° μœ„ν•΄ ν•„μš”ν•œ 반볡자.
    vector<int>::const_iterator i;   // λ²‘ν„°μ˜ λ‚΄μš©μ„ λ³€κ²½ν•˜μ§€ μ•Šμ„ κ²ƒμž„μ„ 보μž₯ν•˜λŠ” 반볡자.
    
  • μ΄ˆκΈ°ν™”μ‹œ 데이터 λ„£κΈ°
    ~cpp 
    int data[3] = {1,2,3};
    vector<int> ar(&data[0], &data[3]);    // dataλ‚΄μ˜ 정보가 μ„ΈνŒ…λœλ‹€.
    
    질문 : 상식에 μ˜κ±°ν•΄μ„œ μ‹€μŠ΅ ν•΄λ³Ό λ•Œ μ € 뢀뢄을 ~cpp vector<int> ar( &data[0], &data[2] ); 둜 ν–ˆλ”λ‹ˆ 계속 λ¬Έμ œκ°€ μƒκ²¨μ„œ.. 였랜 μ‚½μ§ˆλμ— &data3 으둜 ν•΄μ•Όν•œλ‹€λŠ” κ±Έ 발견 ν–ˆμŠ΅λ‹ˆλ‹€. μ€ μ΄μƒν•œ 것 κ°™λ„μš”. ~cpp data[3] μ΄λΌλŠ” 것은 λ°°μ—΄μ˜ λ²”μœ„λΌ λ²—μ–΄λ‚˜λŠ” μ—°μ‚°μΌν…λ°μš”.. 그곳의 λ¦¬νΌλŸ°μŠ€λΌ μ–»μ–΄μ„œ μƒμ„±μžλ‘œ λ„˜κ²¨μ£ΌλŠ”κ²Œ.. μƒμ‹μ—μ„œ κ±°λΆ€ν–ˆλ‚˜ λ΄…λ‹ˆλ‹€. λ‘λ²ˆμ§Έ 인자둜 λ°°μ—΄ λ²”μœ„λΌ λ²—μ–΄λ‚˜λŠ” 값을 λ°›λŠ” μ΄μœ λΌ ν˜Ήμ‹œ μ•„μ‹œλŠ” λΆ„ κ³„μ‹­λ‹ˆκΉŒ? --zennith
    Iterator λ“€μ΄λ‚˜, λ°°μ—΄μ˜ μ˜μ—­μ„정은 κ·Έ λͺ¨ν˜Έμ„±μ„ λ°°μ œν•˜κΈ° μœ„ν•΄μ„œ, λ§ˆμ§€λ§‰ μžλ£Œν˜• + 1의 index λΌ κ°€μ§€λŠ” 것을 μƒμ‹μœΌλ‘œ μ·¨κΈ‰ν•©λ‹ˆλ‹€. MFC, Java λ“± 여타 λΌμ΄λΈŒλŸ¬λ¦¬λ“€μ˜ indexμ ‘κ·Ό ν•˜λŠ”λ²• λ§ˆμ°¬κ°€μ§€ μž…λ‹ˆλ‹€. μ΅μˆ™ν•΄ μ§€λŠ” 수 밖에 없지 μ•Šμ„κΉŒμš”? --NeoCoin
  • 1.2. 데이터 λ„£κΈ°


    ~cpp 
    ar.push_back(3);    // ar의 λ’€μͺ½μœΌλ‘œ 3을 μΆ”κ°€ν•œλ‹€.
    ar[5] = 4           // 6λ²ˆμ§Έμ— 4 λ„£κΈ°
    

    1.3. μ»¨ν…Œμ΄λ„ˆ 순회


    ~cpp 
    vector<int>::const_iterator i;
    
    // for μ—μ„œ λ°˜λ³΅μžλΌ μ΄μš©ν•œ 순회 1
    for(i = ar.begin() ; i != ar.end() ; ++i)
        cout << *i << endl;    
    
    // while μ—μ„œ 반볡자 이용순회
    i = ar.begin();
    while( i != ar.end() ) {
        cout << *i << endl;
        i++;
    }
    
    // forλ¬Έμ—μ„œ μΈλ±μŠ€λΌ μ΄μš©ν•œ 순회
    for(int j = 0 ; j < ar.size() ; ++j)
        cout << ar[j] << endl;
    

    1.4. 데이터 제거


    ~cpp 
    // 6번째 μ›μ†ŒλΌ μ œκ±°
    ar.erase(ar.begin()+5);
    
    // 2~3번째 μ›μ†Œ 제거
    vector<int>::iterator start, end;
    start = ar.begin() + 1;   // 2번째 
    end = start+2;            // μ‹œμž‘λΆ€ν„° 2개 μ‚­μ œ
    ar.erase( start, end);
    

    1.6. Example


    ~cpp 
    #include <vector>
    #include <iostream>
    using namespace std;
    
    typedef vector<int> vecCont;
    typedef vecCont::const_iterator vecIter;
    
    int main()
    {
    	int ar[] = {32,54,654,765,34,4645625};
    	vecCont nums(&ar[0], &ar[6]);
    
    	for(vecIter i = nums.begin() ; i != nums.end() ; ++i)
    		cout << *i << endl;
    	
    	for(int j = 0 ; j < nums.size() ; ++j)
    		cout << nums[j] << endl;
    	
    	return 0;
    }
     

    1.7. 벑터 λΉ„μš°κΈ°

    • μ•„λž˜μ™€ 같은 λ°©λ²•μœΌλ‘œ 벑터 λ‚΄μš©μ„ ν†΅μ§Έλ‘œ μ§€μš΄λ‹€.

    ~cpp
    	m_inputMessage.~vector<CString>();
    	new ( &m_inputMessage ) vector<CString>();
    
    ----
    See Also STL/VectorCapacityAndReserve
    ----
    STL
    Valid XHTML 1.0! Valid CSS! powered by MoniWiki
    last modified 2021-02-07 05:27:58
    Processing time 0.0250 sec