Tôi cần hiển thị một vectơ được sắp xếp bằng thuật toán sắp xếp hợp nhất. Tuy nhiên, khi tôi sử dụng v.begin(), bạn tôi sử dụng v.data() để truyền vectơ. Mã của anh ấy hoạt động tốt, mã của tôi thì không. Hãy giải thích.
Tôi đã thử chuyển v[0] và v.begin(). Nó không hoạt động.
void merge_sort(int *a, int i, int j);
void merge_sort(int *a, int i, int j)
{
int giữa;
if (i < j) {
giữa = (i + j) / 2;
merge_sort(a, i, mid); // đệ quy trái
merge_sort(a, mid + 1, j); // đệ quy phải
merge(a, i, mid, mid + 1, j);
}
}
int main()
{
int số;
cout << "Nhập độ dài mảng (n) = ";
cin >> số;
vector a(num);
cout << "Nhập số:" << endl;
cho (int i = 0; i < num; i++)
cin >> a[i];
merge_sort(a.data(), 0, num - 1);
cout << "\nĐã sắp xếp mảng :\n";
cho (int i = 0; i < num; i++)
cout << a[i] << " ";
cout << endl;
return 0;
}
v.begin() và v[0] hiển thị lỗi, trong khi v.data() hoạt động hoàn hảo.
Giả sử một vectơ v
kiểu std::vector
.Sau đó:
v[0]
Trả về phần tử vectơ đầu tiênTrích dẫn Vàv
Không được để trống (nếu không, hành vi sẽ không được xác định). Kiểu biểu thức này là int&
hoặc const int&
.
v.data()
Trả về một con trỏ tới phần tử vector đầu tiêncon trỏ,nếu nhưv
Sau đó, một số giá trị con trỏ không xác định được trả về là null. Kiểu biểu thức này là int*
hoặc const int*
.
v.bắt đầu()
Trả về phần tử vectơ đầu tiên迭代器,hoặcv.end()
nếu nhưv
trống rỗng. Kiểu biểu thức này là std::vector::iterator
hoặc std::vector::const_iterator
.
do bạn merge_sort
Mong đợi, như đối số đầu tiên của nó, một con trỏ ( int* a
), thì trong ba biểu thức này chỉ có v.data()
Có loại phù hợp. Hoặc tất nhiên bạn cũng có thể gửi&v[0]
cũng như&*v.begin()
.
Tôi là một lập trình viên xuất sắc, rất giỏi!