C++ vector::data() 函式



C++ vector::data() 函式用於訪問向量元素,它返回一個指向向量內部用於儲存元素的記憶體陣列的指標。由於向量中的元素保證以與向量指定的相同順序儲存在連續的儲存位置,因此可以對檢索到的指標進行偏移以訪問陣列中的任何元素。

如果向量物件是 const 限定的,則該函式返回指向 const 值型別的指標;否則,返回指向值型別的指標,並且 data() 函式的複雜度是常數。data() 函式的時間複雜度是常數。

語法

以下是 C++ vector::data() 函式的語法:-

value_type* data() noexcept;const value_type* data() const noexcept;

引數

它不包含任何引數。

示例 1

讓我們考慮以下示例,我們將使用 x 作為指向 int 型別的指標來引用向量元素。

#include <iostream>  
#include<vector>  
using namespace std;

int main(){  
   vector<int> myvector{11,22,33,44,55};  
   int *x=myvector.data();  
   for(int i=0;i<myvector.size();i++)  
   cout<<*x++<<" ";  
   return 0;  
}

輸出

當我們編譯並執行上述程式時,將產生以下結果:-

11 22 33 44 55

示例 2

考慮另一種情況,其中 x 是指向 string 型別的指標,引用向量的元素。

#include <iostream>  
#include<vector>  
using namespace std;

int main(){  
   vector<string> myvector{"BEN","GLEN","SHINCHAN"};  
   string *x=myvector.data();  
   for(int i=0;i<myvector.size();i++)  
   cout<<*x++<<" ";  
   return 0;  
}  

輸出

執行上述程式後,將產生以下結果:-

BEN GLEN SHINCHAN

示例 3

考慮以下示例,我們將更新向量元素。

#include <iostream>
#include <vector>
using namespace std;

int main(){
   vector<int> myvector{12,23,34,45,56};
   int* x = myvector.data();
   cout << "Before Updation:" << endl;
   for (int i = 0; i < myvector.size(); i++){
      cout << *x << endl;
      x++;
   }
   x = myvector.data();
   *(x + 3) = 111;
   *(x + 2) = 222;
   cout << "After Updation:" << endl;
   for (int i = 0; i < myvector.size(); i++){
      cout  << *x << endl;
      x++;
   }
   return 0;
}

輸出

執行上述程式後,將產生以下結果:-

Before Updation:
12
23
34
45
56
After Updation:
12
23
222
111
56

示例 4

檢視以下示例,我們將使用 data() 函式。

#include <iostream>
#include <vector>

int main (){
   std::vector<int> tutorial (4);
   int* x = tutorial.data();
   *x = 111;
   x[3] = 333;
   std::cout << "Elements are:";
   for (unsigned i=0; i<tutorial.size(); ++i)
      std::cout << ' ' << tutorial[i];
   std::cout << '\n';
   return 0;
}

輸出

執行上述程式後,將產生以下結果:-

Elements are: 111 0 0 333
廣告