Lecture 9: Introduction to Arrays in C++

Lecture 9: Introduction to Arrays in C++

Introduction to Arrays

Overview of the Lecture

  • Love Bubbar introduces the topic of arrays, outlining the key questions that will be addressed: What is an array? Why do we need arrays? How do we use them? What operations are necessary?
  • The lecture will also cover concepts like pass by value and pass by reference, indicating a comprehensive approach to understanding arrays.

Initial Problem Statement

  • A scenario is presented where three variables ('a', 'b', 'c') are compared to find the largest value. The values given are 2, 3, and 0 respectively.
  • The speaker emphasizes that while comparing three variables is manageable, scaling this up to ten or even one hundred values becomes impractical.

Challenges with Large Data Sets

Increasing Complexity

  • As the number of values increases (e.g., from 10 to 10000), it becomes increasingly difficult to manage comparisons manually.
  • The speaker suggests that intelligent solutions involve finding maximum values dynamically rather than hardcoding variable comparisons.

Introduction of Arrays

  • To handle large datasets efficiently, arrays are introduced as a solution for storing multiple similar data types in contiguous memory locations.

Understanding Arrays

Definition and Functionality

  • An array is defined as a data structure that can hold similar types of items (e.g., integers, characters). This allows for organized storage and retrieval.
  • Analogies are used (like bags containing only potatoes or wallets holding only specific currency notes) to illustrate how arrays function as containers for uniform data types.

Types of Data in Arrays

  • It’s explained that arrays can store various data types including predefined types (integers, characters) or custom-made classes/objects.
  • Examples include creating an array for 10000 integers or custom objects like cars. All elements must be of the same type within an array.

Memory Allocation in Arrays

Contiguous Memory Storage

  • The concept of contiguous memory allocation is discussed; all elements in an array occupy consecutive memory addresses.
  • An example illustrates how five integers can be stored starting from a specific address in memory, emphasizing efficient space utilization.

Understanding Arrays and Indexing in Programming

Introduction to Arrays

  • An array is a data structure that allows access to its elements via an index. The concept of indexing will be explored further.
  • An array is defined as a list containing the same type of elements, which enables storage of multiple values in a single variable, making it more efficient than creating numerous individual variables.

Importance of Arrays

  • Arrays are essential for storing multiple values efficiently, allowing easy access and management of data.
  • The speaker mentions delays in video uploads due to personal editing responsibilities but emphasizes the importance of understanding arrays as foundational knowledge in data structures.

Declaring and Initializing Arrays

  • To declare an array, one can use syntax like int dost, which allocates memory for 10 integer elements.
  • The name of the array also serves as a reference to the address of its first element, with each subsequent element occupying contiguous memory locations.

Understanding Indexing

  • Indexing starts at 0; thus, accessing the first element is done using v, followed by v for the second element, and so on.
  • For example, if v contains 2 and v contains 6, then accessing these indices retrieves their respective values based on calculated addresses.

Accessing Array Elements

  • To find an element at index 3 (e.g., v), you calculate its address based on the base address plus offsets determined by the size of each element (4 bytes for integers).
  • It’s crucial to remember that valid indices range from 0 up to n-1 for an array size n; hence accessing out-of-bounds indices leads to errors.

Initialization Techniques

  • Initializing an array can be done directly during declaration: e.g., int number=5,7,11 assigns specific values to each index.
  • If not initialized properly (e.g., without specifying initial values), arrays may contain garbage values leading to unpredictable behavior.

Practical Implementation

  • A practical example involves declaring an integer array with a specified size (int number) and checking for errors during execution.
  • Attempting to access indices beyond declared sizes results in runtime errors similar to trying to purchase items without sufficient funds.

Understanding Array Initialization and Functions in C++

Declaring and Accessing Arrays

  • An integer array of size 15 is declared, emphasizing that all accessed indices must be within the bounds of the array.
  • The valid index range for accessing elements is from 0 to n-1, where n represents the size of the array.
  • An example of initializing an array int second= 5, 7, 11; is provided, confirming successful execution without errors.

Printing Array Elements

  • To print elements from an array, only the name of the array and its index are required.
  • A loop iterating from 0 to n-1 is proposed to print each element: for(int i = 0; i < n; i++) cout << third[i] << " "; .
  • When running this code with initialized values (2 and 7), uninitialized elements default to zero.

Understanding Default Values in Arrays

  • If an array has a large size but few initialized elements, remaining positions will automatically hold a value of zero.
  • Initializing an entire array with zeros can be done using syntax like int forth= 0;, which results in all values being set to zero.

Function Creation for Printing Arrays

  • To avoid repetitive print statements, a function named print_array is created that takes an integer array as a parameter for cleaner code.
  • The function successfully prints the contents of any passed integer array when called.

Array Size Determination and Best Practices

Passing Arrays to Functions

  • When passing arrays into functions, it’s unnecessary to specify their size explicitly; however, understanding your data's length is crucial.

Using sizeof Operator

  • The sizeof operator can determine the total byte size of an array. For instance, if fifth has ten integers (each typically four bytes), its total size would be calculated as 40 bytes.

Distinguishing Between Size and Length

  • A common mistake occurs when assuming that the declared size reflects how many elements are actively used. For example, if only two out of fifteen slots are filled in an integer array (third), querying its size will still return fifteen instead of two.

Handling Different Data Types in Arrays

Error Handling with Different Data Types

  • Attempting to use a function designed for integers on other data types (like characters or doubles) leads to errors unless specifically handled within separate functions.

Finding Maximum and Minimum Values in Arrays

Problem Statement

  • A practical exercise involves finding maximum and minimum values within a user-defined integer array. Given input 4,12,8,10, expected output should indicate max = 12 and min = 4.

Dynamic Array Declaration

  • To create an adjustable-sized integer array based on user input: int num[size];, where 'size' can vary according to user specifications.

Input Handling

  • Taking inputs can be simplified by replacing standard output commands (cout) with input commands (cin) during data entry processes.

Understanding Array Operations and Functions

Basic Functionality of Arrays

  • The discussion begins with the importance of handling minimum and maximum values in arrays, emphasizing that the code is functioning correctly.
  • A demonstration on how to find maximum and minimum values using predefined functions is presented, highlighting a variable maxi that stores the maximum element.
  • The output confirms that both max and min functions are operational, showcasing their utility in array manipulation.

Scope and Variable Updates

  • Transitioning to scope, an array is created followed by a call to an update function to illustrate how variables behave within different scopes.
  • An error occurs when trying to update a variable inside a function; it’s noted that changes do not reflect back in the main function due to scope differences.
  • The concept of passing arrays by reference is introduced, explaining how modifications in the update function affect the original array since only its address is passed.

Homework Assignment

  • A homework task is assigned: print the sum of all elements in an array, reinforcing practical application of learned concepts.

Searching Techniques: Linear Search

Implementing Linear Search

  • Introduction of linear search as a method for finding elements within an array. A new file named linear_search.cvv will be created for this purpose.
  • A boolean search function is defined which takes an array as input to determine if a specific element exists within it.

Example Execution

  • An example illustrates searching for the number 7 in an array 1, 2, 7, 9, 11, demonstrating step-by-step checking until found.

Reversing an Array

Conceptualizing Array Reversal

  • The next topic focuses on reversing an array. It emphasizes swapping elements from both ends towards the center for reversal.
  • Using an example [1, 2, 3, 4, 5, 6], it explains how pairs (1 with 6; 2 with 5; etc.) are swapped systematically.

Implementation Details

  • Key considerations include handling odd-length arrays where the middle element remains unchanged during swaps.
  • Two variables track starting and ending indexes for efficient swapping during implementation.

Array Reversal and Key Concepts

Understanding the Array Reversal Process

  • The process involves incrementing the 'start' index and decrementing the 'end' index, followed by swapping values at these two indexes. This continues until both indices cross each other.
  • The termination condition for this algorithm is reached when the 'start' index becomes greater than the 'end' index.
  • In an odd-length array case, after swapping values at specified indexes, we again increment 'start' and decrement 'end', leading to a situation where they may point to the same index.
  • When both indices meet, a swap occurs with itself, indicating that we've reached our stopping point in the reversal process.

Practical Example of Array Reversal

  • A practical example is introduced to illustrate how to reverse an array step-by-step.
  • The initial setup includes defining 'start' and 'end' indexes before performing swaps between their respective values.
  • After each swap, we continue adjusting the indices by incrementing 'start' and decrementing 'end'.
  • Once again, if ‘start’ exceeds ‘end’, it confirms that we have completed reversing the array.

Coding Implementation

  • The next step involves writing code for reversing an array using two separate arrays as needed for implementation clarity.
  • A function named reverse will be called to execute this operation followed by printing out the reversed array.
  • Although a print function already exists, there’s a need to redefine it as PrintArray for better organization in code structure.

Writing Reverse Function Logic

  • The Reverse function initializes with start = 0 and end = n - 1, where n is the length of the array being reversed.
  • A loop runs while ensuring that start remains less than end, allowing for continuous swapping of elements at these indices until termination conditions are met.

Conclusion on Array Reversal

  • Upon running this code snippet, it successfully returns correct results demonstrating how straightforward it can be to reverse an array through systematic swaps of elements based on index adjustments.
  • Future lectures will cover various important questions related to arrays such as:
  • Swap alternate elements
  • Find unique elements in an array
  • Identify duplicate elements (a critical question)
  • Determine intersections between two arrays
  • Additional topics include pair sums and triplet sums which are frequently asked in interviews across major companies like Amazon and Microsoft.

Engagement with Audience

Video description

In this Video, we are going to learn about Arrays, Reversing an Array and Linear Search There is a lot to learn, Keep in mind “ Mnn boot karega k chor yrr apne se nahi yoga ya maza nahi para, Just ask 1 question “ Why I started ? “ Coding Ninjas Visit Relevel: https://relvl.co/pox1 Discord Server Link: https://discord.gg/feSQvVXMrd Course Flow: https://whimsical.com/dsa-4-placement-by-love-babbar-C7JX2fJ8hprv9ivEHkArjD@2Ux7TurymNF9zkFahVLk Homework: Added in Video already Notes Link: https://drive.google.com/file/d/1gSbnSQvpzauATYAC3PtBT1fFzy7_Z-mj/view?usp=sharing Code Links: https://github.com/loveBabbar/CodeHelp-DSA-Busted-Series Telegram Group Link: Love Babbar CODE HELP https://telegram.me/lovebabbercodehelp Do provide you feedback in the comments, we are going to make it best collectively. Connect with me here: Instagram: https://www.instagram.com/lovebabbar1/ Twitter: https://twitter.com/lovebabbar3 Intro Sequence: We have bought all the required Licenses of the Audio, Video & Animation used. Timestamps: 00:00 - Introduction 03:10 - Promotion 04:18 - What is Array ? 09:05 - Why array ? 11:25 - Declaring Arrays 14:04 - Indexes in Array 16:36 - Accessing in array 17:55 - Initialisation in Arrays 20:11 - Homework 20:55 - Implementation 32:32 - Arrays with Functions 39:56 - Different types of Arrays 43:31 - Maximum/Minimum in an Array 54:10 - Scopes in Array 57:56 - Why arr[0] changed in main function ? 01:02:08 - Homework 01:04:44 - Linear Search 01:14:07 - Reverse an Array 01:27:31 - Some Question for next Video #DSABusted #LoveBabbar