gpt4 book ai didi

c++ - vector v 的 v[0]、v.begin() 和 v.data() 之间有什么区别?

转载 作者:太空宇宙 更新时间:2023-11-04 15:11:20 28 4
gpt4 key购买 nike

我需要显示使用合并排序算法排序的 vector 。然而,当我使用 v.begin() 时,我的 friend 使用 v.data() 来传递 vector 。他的代码运行良好,而我的却不行。请解释。

我已经尝试传递 v[0] 和 v.begin()。它不起作用。

void merge_sort(int *a, int i, int j);

void merge_sort(int *a, int i, int j)
{
int mid;

if (i < j) {
mid = (i + j) / 2;

merge_sort(a, i, mid); // left recursion

merge_sort(a, mid + 1, j); // right recursion

merge(a, i, mid, mid + 1, j);
}
}

int main()
{

int num;
cout << "Enter array length (n) = ";
cin >> num;

vector<int> a(num);

cout << "Enter the number:" << endl;
for (int i = 0; i < num; i++)
cin >> a[i];

merge_sort(a.data(), 0, num - 1);

cout << "\nSorted array :\n";
for (int i = 0; i < num; i++)
cout << a[i] << " ";

cout << endl;
return 0;
}

v.begin() 和 v[0] 显示错误,而 v.data() 完美运行。

最佳答案

假设一个 vector v类型 std::vector<int> .然后:

  • v[0]返回第一个 vector 元素的引用v不能为空(否则,行为未定义)。这个表达式的类型是 int&const int& .

  • v.data()返回指向第一个 vector 元素的指针,如果v 则返回一些未指定的指针值是空的。这个表达式的类型是 int*const int* .

  • v.begin()返回第一个 vector 元素的迭代器,或v.end()如果v是空的。这个表达式的类型是 std::vector<int>::iteratorstd::vector<int>::const_iterator .

由于您的 merge_sort期望,作为它的第一个参数,一个指针( int* a ),然后,在这三个表达式中,只有 v.data()有合适的类型。或者当然也可以传&v[0]以及&*v.begin() .

关于c++ - vector v 的 v[0]、v.begin() 和 v.data() 之间有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58464546/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com