簡體   English   中英

如何理解“矢量 <int> avector(arr,arr + sizeof(arr)/ sizeof(arr [0]))”?

[英]How to understand “vector<int> avector (arr, arr + sizeof(arr) / sizeof(arr[0]) )”?

在下面的代碼中,什么是

vector<int> avector (arr, arr + sizeof(arr) / sizeof(arr[0]) );

main()

vector<int> bubbleSort(vector<int> avector) { //the vector for bubble sort
  for (int passnum = avector.size()-1; passnum > 0; passnum -= 1) {
      for (int i = 0; i < passnum; i++) {
          if (avector[i] > avector[i+1]) {
              int temp = avector[i];
              avector[i] = avector[i+1];
              avector[i+1] = temp;
          }
      }
  }
  return avector;
}

int main() {
    // Vector initialized using a static array
    static const int arr[] = {54,26,93,17,77,31,44,55,20};
    vector<int> avector (arr, arr + sizeof(arr) / sizeof(arr[0]) );

    vector<int> bvector = bubbleSort(avector);
    for (unsigned int i = 0; i < bvector.size(); i++) {
        cout<<bvector[i]<< " ";
    }
    return 0;
}

謝謝!

傑夫

vector<int> avector (arr, arr + sizeof(arr) / sizeof(arr[0]) );

arr C樣式數組中初始化std::vectoravector

參數是迭代器。 這些迭代器定義了一系列元素:

  • arr :迭代器到要復制范圍的第一個元素。
  • arr + sizeof(arr) / sizeof(arr[0]) :迭代器,指向要復制范圍的過去-結束元素

C ++ 11的方式是將函數模板std::cbegin()std::cend() std::cbegin() std::cend()用於C型數組:

vector<int> avector(std::cbegin(arr), std::cend(arr));

這種方法利用模板自變量推導來推斷C樣式數組的大小。 這種方式不太容易出錯,因為它需要更少的鍵入。

n = sizeof(arr) / sizeof(arr[0])是數組存儲的元素數。

avector(arr, arr + sizeof(arr) / sizeof(arr[0])表示將數組arr的元素復制到向量avector從索引0n-1 (含)

通過復制arr所有元素來構造avector

它使用向量的以下構造函數

 template< class InputIt > vector( InputIt first, InputIt last, const Allocator& alloc = Allocator() ); 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM