Computer >> 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ột 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, chúng tạo thành một thực thể. Mảng là một tính năng cơ bản trong ngôn ngữ C ++. Tạo các 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]

Phương pháp tạo mảng song song

Tìm kiếm và sắp xếp là một số tính năng cần thiết cần thiết để tạo thành một 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 một người có chiều cao dưới 1m80. Vì vậy, chúng tôi 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 nhận được kết quả, chúng tôi có thể in chúng ra.

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

  • Tìm kiếm giá trị bắt buộc trong mảng tương ứng

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

  • In các giá trị.

Sắp xếp

sắp xếp, chúng tôi sắp xếp tất cả các mảng có cùng chỉ mục 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 chúng ta hoán đổi hai độ 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 các mảng theo số hoặc theo thứ tự bảng chữ cái.

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

  • Tìm chỉ mục trong mảng.

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

Triển khai

  • Mã đã cho lưu trữ tên, tên thứ hai và chiều cao.

  • Mã đã cho lưu trữ tên, tên thứ hai và chiều cao.

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

Khi đó học sinh có chiều cao bằng 158 cm trong kỷ lục.

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 << "Person having height 158"
         " cms is "
         << first_name[index]
         << " " << last_name[index] << endl;
         return;
      }
      else if (height[index] > 158)
         high = index - 1;
      else
         low = index + 1;
   }
   cout << "Sorry, no such person with"
   " height 158 cms";
   cout << "is found in the record";
}
void printParallelArray(string first_name[],
string last_name[], int height[], int n){
   cout << "Name of people in increasing";
   cout << "order of their height: " << endl;
   for (int i = 0; i < n; i++) {
      cout << first_name[i] << " "
      << last_name[i] << " has height "
      << height[i] << " cms\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 << "Name of the second tallest person" " is "
   << first_name[n - 2] << " "
   << last_name[n - 2] << endl;
   cout << "Name of the third shortest person is "
   << first_name[2] << " " << last_name[2]
   << endl;
   binarySearch(first_name, last_name, height, 158, n);
   return 0;
}

Đầu ra

Name of people in increasingorder of their height:
Dexter Jonas has height 148 cms
Hank lee has height 153 cms
John Jocab has height 160 cms
Fredd smith has height 231 cms

Name of the second tallest person is John Jocab
Name of the third shortest person is John Jocab
Sorry, no such person with height 158 cmsis found in the record

Ư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 một lượng không gian đáng kể bằng cách tránh các vấn đề về căn chỉnh. Ví dụ, một số kiến ​​trúc hoạt động tốt nhất nếu các 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ể ném đi 3 byte. Nhiều trình biên dịch hiện đại có thể tự động tránh những vấn đề như vậy. Tuy nhiên, trước đây, 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ột 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 là trên một số kiến ​​trúc.

  • Đã kiểm tra theo thứ tự

  • Việc kiểm tra một trường đơn lẻ của từng bản ghi trong mảng một cách tuần tự sẽ nhanh chóng trên các máy hiện đại vì nó tương đương với một đường truyền tuyến tính của một mảng duy nhất với vị trí lý tưởng của hành vi tham chiếu và bộ nhớ cache.

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

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

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

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

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

  • Chúng tốn kém để mở rộng hoặc ký hợp đồng vì mỗi mảng trong số một số mảng phải được phân bổ lại. Mảng nhiều cấp có thể giúp giải quyết vấn đề này, nhưng chúng ảnh hưởng đến hiệu suất do cần có thêm hướng dẫn để 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ột mảng song song cùng với mã c ++. Chúng tôi cũng có thể viết mã 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 các mục đích khác nhau, chẳng hạn như phân loại và tìm kiếm. Chúng tôi hy vọng bạn thấy hướng dẫn này hữu ích.