簡體   English   中英

通過原始指針訪問int向量的元素

[英]Accessing elements of a vector of ints by raw pointers

我想知道下面的代碼是否合法。

基本上,我有一個std::vector<int>並且我有一個處理int數組的舊函數。 由於std::vector的元素始終是連續的,因此代碼應始終有效(它實際上適用於我的實現),但對我來說似乎仍然有些不足。

#include <vector>
#include <iostream>

void LecagyFunction(int *data, int length)
{
  for (int i = 0; i < length; i++)
    std::cout << data[i] << std::endl;
}

int main()
{
  std::vector<int> vector;
  vector.push_back(5);
  vector.push_back(4);
  vector.push_back(3);
  LecagyFunction(&vector[0], vector.size());
}

預期的輸出是:

5
4
3

這不是黑客,而是對Vector的100%合法(和預期)使用。 在C ++ 11中,應重寫代碼以利用data()成員-它是為空向量定義的,與operator[]不同。

LecagyFunction(vector.data(), vector.size());

另外,上述技術不適用於vector<bool> ,因為后者不能遵循常規矢量的屬性(這是一個可怕的主意,眾所周知,現在大家都可以理解)。

來自: http : //www.cplusplus.com/reference/vector/vector/

就像數組一樣,向量對它們的元素使用連續的存儲位置,這意味着它們的元素也可以使用指向其元素的常規指針上的偏移量來訪問,並且效率與數組相同。 但是與數組不同,它們的大小可以動態更改,其存儲由容器自動處理。

來自: http : //en.cppreference.com/w/cpp/container/vector

元素是連續存儲的,這意味着不僅可以通過迭代器訪問元素,而且可以使用指向元素的常規指針上的偏移量對其進行訪問。 這意味着可以將指向向量元素的指針傳遞給任何需要指向數組元素的指針的函數。

是的,完全合法,並打算以此方式工作。

暫無
暫無

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

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