Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> C++

Mảng song song trong C++


Mảng song song còn được gọi là mảng cấu trúc.

Định nghĩa − Mảng song song có thể được định nghĩa là nhiều mảng trong đó các phần tử thứ i có liên quan chặt chẽ với nhau, và cùng nhau cấu thành một thực thể. Mảng là một tính năng cơ bản trong ngôn ngữ C++. Việc tạo mảng song song giúp chúng ta so sánh hai hoặc nhiều mảng.

Ví dụ,

first_name = ['John', 'Dexter', 'Fredd', 'Hank', 'james'] last_name = ['Jocab', 'Jonas', 'smith', 'lee', 'banner'] height = [160, 148, 231, 153, 162]

Cách tiếp cận để tạo Mảng song song

Tìm kiếm và sắp xếp là một số tính năng thiết yếu cần thiết để tạo mảng song song.

Tìm kiếm

Tìm kiếm dựa trên các giá trị cụ thể của một thực thể. Ví dụ, chúng ta cần tìm địa chỉ của người có chiều cao nhỏ hơn 180cm. Vì vậy, chúng ta tìm kiếm tiêu chí của mảng chiều cao có giá trị nhỏ hơn 180. Cuối cùng, khi có kết quả, chúng ta có thể in ra.

Chúng ta có thể làm theo các bước sau để thực hiện tìm kiếm.

  • Tìm giá trị yêu cầu trong mảng tương ứng

  • Lưu chỉ số nơi các giá trị được lấy được.

  • In các giá trị.

Sắp xếp

Sắp xếp, chúng ta sắp xếp tất cả các mảng với cùng chỉ số và giá trị. Ví dụ, chúng ta cần sắp xếp chỉ số chiều cao theo thứ tự tăng dần. Vì vậy, khi hoán đổi hai chiều cao, chúng ta cũng hoán đổi giá trị của chúng trong các mảng khác. Chúng ta có thể sắp xếp mảng theo thứ tự số hoặc chữ cái.

Chúng ta cần làm theo các bước sau để sắp xếp một mảng.

  • Tìm chỉ số trong mảng.

  • Bây giờ hoán đổi giá trị của 2 chỉ số đã tính của tất cả các mảng.

Triển khai

  • Code đã cho lưu trữ tên, tên đệm và chiều cao.

  • Code đã cho lưu trữ tên, tên đệm và chiều cao.

  • Chúng ta cần tìm tên của sinh viên cao thứ hai, sinh viên thấp thứ ba.

Sau đó sinh viên có chiều cao bằng 158 cm trong hồ sơ.

Ví dụ

#include <iostream> using namespace std; int partition(string first_name[], string last_name[], int height[], int low, int high){    int pivot = height[high]; // pivot    int i = (low - 1); // Index of smaller element    for (int j = low; j <= high - 1; j++) {       if (height[j] <= pivot) {          i++;          string temp = first_name[i];          first_name[i] = first_name[j];          first_name[j] = temp;          temp = last_name[i];          last_name[i] = last_name[j];          last_name[j] = temp;          int temp1 = height[i];          height[i] = height[j];          height[j] = temp1;       }    }    string temp = first_name[i + 1];    first_name[i + 1] = first_name[high];    first_name[high] = temp;    temp = last_name[i + 1];    last_name[i + 1] = last_name[high];    last_name[high] = temp;    int temp1 = height[i + 1];    height[i + 1] = height[high];    height[high] = temp1;    return (i + 1); } void quickSort(string first_name[], string last_name[], int height[], int low, int high){    if (low < high) {       int pi = partition(first_name, last_name, height, low, high);       quickSort(first_name, last_name, height, low, pi - 1);       quickSort(first_name, last_name, height, pi + 1, high);    } } void binarySearch(string first_name[], string last_name[], int height[], int value, int n){    int low = 0, high = n - 1;    int index;    while (low <= high) {       index = (high + low) / 2;       if (height[index] == 158) {          cout << "Người có chiều cao 158"          " cm là "          << first_name[index]          << " " << last_name[index] << endl;          return;       }       else if (height[index] > 158)          high = index - 1;       else          low = index + 1;    }    cout << "Xin lỗi, không tìm thấy người nào với"    " chiều cao 158 cm";    cout << "trong hồ sơ"; } void printParallelArray(string first_name[], string last_name[], int height[], int n){    cout << "Tên mọi người theo thứ tự";    cout << "tăng dần của chiều cao: " << endl;    for (int i = 0; i < n; i++) {       cout << first_name[i] << " "       << last_name[i] << " có chiều cao "       << height[i] << " cm\n";    }    cout << endl; } int main(){    int n = 4;    string first_name[] = { "John", "Dexter", "Fredd", "Hank", "james"};    string last_name[] = { "Jocab", "Jonas", "smith", "lee", "banner"};    int height[] = {160, 148, 231, 153, 162};    quickSort(first_name, last_name, height, 0, n - 1);    printParallelArray(first_name, last_name, height, n);    cout << "Tên người cao thứ hai" " là "    << first_name[n - 2] << " "    << last_name[n - 2] << endl;    cout << "Tên người thấp thứ ba là "    << first_name[2] << " " << last_name[2]    << endl;    binarySearch(first_name, last_name, height, 158, n);    return 0; }

Đầu ra

Tên mọi người theo thứ tựtăng dần của chiều cao: Dexter Jonas có chiều cao 148 cm Hank lee có chiều cao 153 cm John Jocab có chiều cao 160 cm Fredd smith có chiều cao 231 cm Tên người cao thứ hai là John Jocab Tên người thấp thứ ba là John Jocab Xin lỗi, không tìm thấy người nào với chiều cao 158 cmtrong hồ sơ

Ưu điểm của Mảng song song

  • Trong một số trường hợp, chúng có thể tiết kiệm đáng kể không gian bằng cách tránh các vấn đề căn chỉnh. Một số kiến trúc, ví dụ, hoạt động tốt nhất nếu số nguyên 4 byte luôn được lưu trữ tại các vị trí bộ nhớ là bội số của 4. Nếu trường trước đó là một byte đơn, nó có thể làm lãng phí 3 byte. Nhiều trình biên dịch hiện đại có thể tự động tránh các vấn đề như vậy. Tuy nhiên, trong quá khứ, một số lập trình viên sẽ khai báo rõ ràng các trường theo thứ tự giảm dần của các ràng buộc căn chỉnh.

  • Khi số lượng mục trong mảng nhỏ, chỉ số mảng có thể chiếm ít không gian hơn nhiều so với toàn bộ con trỏ, đặc biệt trên một số kiến trúc.

  • Được kiểm tra theo thứ tự

  • Việc kiểm tra một trường đơn của mỗi bản ghi trong mảng theo thứ tự là nhanh trên các máy hiện đại vì nó tương đương với việc duyệt tuyến tính một mảng đơn với tính cục bộ tham chiếu và hành vi cache lý tưởng.

Nhược điểm của Mảng song song

  • Vì các mảng khác nhau có thể được lưu trữ ngẫu nhiên xa nhau, chúng có tính cục bộ tham chiếu kém hơn đáng kể khi cố gắng truy cập các bản ghi không theo thứ tự và kiểm tra nhiều trường của mỗi bản ghi.

  • Chúng làm mờ mối liên hệ giữa các trường trong một bản ghi đơn (ví dụ: không có thông tin liên quan đến chỉ số giữa chúng, có thể bị sử dụng sai).

  • Chúng có ít hỗ trợ ngôn ngữ trực tiếp (ngôn ngữ và cú pháp của nó thường không biểu thị mối quan hệ giữa các mảng trong mảng song song và không thể bắt lỗi).

  • Vì thu thập các trường không phải là một "đối tượng", việc truyền nó xung quanh tốn thời gian và dễ gây lỗi. Ví dụ, hàm phải chấp nhận các trường làm đối số riêng biệt thay vì gọi hàm để tác động lên một bản ghi đơn (hoặc cấu trúc hoặc đối tượng). Nhiều danh sách tham số phải thay đổi khi thêm hoặc thay đổi trường mới. Ngược lại, truyền đối tượng như một toàn thể sẽ tránh hoàn toàn các thay đổi như vậy.

  • Chúng tốn kém khi mở rộng hoặc thu hẹp vì mỗi trong số vài mảng phải được cấp phát lại. Mảng đa cấp có thể giúp giải quyết vấn đề này, nhưng chúng làm giảm hiệu suất do sự gián tiếp bổ sung cần thiết để tìm các phần tử mong muốn.

Kết luận

Trong hướng dẫn này, chúng ta đã học cách tạo mảng song song cùng với code C++. Chúng ta cũng có thể viết code này bằng Java, Python và các ngôn ngữ khác. Mảng là một trong những tính năng cơ bản và hữu ích nhất của ngôn ngữ lập trình C++. Chúng được sử dụng cho nhiều mục đích, như sắp xếp và tìm kiếm. Hy vọng bạn thấy hướng dẫn này hữu ích.