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
广告