Quando si desidera accedere a un vettore std :: come un array C è possibile scegliere tra almeno quattro modi diversi, come si può vedere in questo esempio:std :: vector: vec.data() o & vec [0]
#include <iostream>
#include <vector>
using namespace std;
int main() {
std::vector<int> vec;
vec.push_back(1);
vec.push_back(2);
vec.push_back(42);
vec.push_back(24024);
{
int* arr = vec.data();
cout << arr << endl; /* output: 0x9bca028 */
cout << arr[3] << endl; /* output : 24024 */
}
{
int* arr = &vec.front();
cout << arr << endl; /* output: 0x9bca028 */
cout << arr[3] << endl; /* output : 24024 */
}
{
int* arr = &vec[0];
cout << arr << endl; /* output: 0x9bca028 */
cout << arr[3] << endl; /* output : 24024 */
}
{
int* arr = &vec.at(0);
cout << arr << endl; /* output: 0x9bca028 */
cout << arr[3] << endl; /* output : 24024 */
}
}
Quello che ho trovato nella maggior parte dei casi è il &vec[0]
. Penso che sia il meno elegante, quindi ... perché è il più usato? È più efficiente o più compatibile? Non riesco a trovare molta documentazione su data()
.
'data()' * may * essere considerato incompatibile nel senso che è C++ 11 (che spiega la scarsa documentazione, in quanto le principali fonti di documentazione stanno recuperando nuove funzionalità), anche se il tempo sicuramente farà svanire questa incompatibilità e quindi è la via definitiva da percorrere. –