【发布时间】:2019-10-19 14:12:41
【问题描述】:
我需要显示使用归并排序算法排序的向量。但是,我的朋友使用 v.data() 来传递向量,而我使用 v.begin()。 他的代码运行良好,而我的代码却没有。请解释一下。
我已经尝试过传递 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() 工作正常。
【问题讨论】:
-
欢迎来到 Stack Overflow Farhan! :)
merge()方法的定义在哪里? -
如果容器为空,
v[0]无效(越界)。对于v.begin(),它本身是有效的,但如果容器为空,取消引用迭代器无效。