Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

Commit 3106be6

Browse filesBrowse files
committed
update Array
1 parent 7c79002 commit 3106be6
Copy full SHA for 3106be6

File tree

12 files changed

+167
-3
lines changed
Filter options

12 files changed

+167
-3
lines changed

‎.github/workflows/ci.yml

Copy file name to clipboardExpand all lines: .github/workflows/ci.yml
+1-1Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ jobs:
1616
strategy:
1717
matrix:
1818
# Add your projects from 'data-structures'
19-
project: [LinkedList, DoublyLinkedList, Queue, Stack]
19+
project: [Array, LinkedList, DoublyLinkedList, Queue, Stack]
2020

2121
steps:
2222
# Step 1: Checkout the repository

‎README.md

Copy file name to clipboardExpand all lines: README.md
+1Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ Remember that each data has its own trade-offs. And you need to pay attention mo
2121

2222
`B` - Beginner, `A` - Advanced
2323

24+
* `B` [Array](data-structures/Array)
2425
* `B` [Linked List](data-structures/LinkedList)
2526
* `B` [Doubly Linked List](data-structures/DoublyLinkedList)
2627
* `B` [Queue](data-structures/Queue)

‎README.zh-CN.md

Copy file name to clipboardExpand all lines: README.zh-CN.md
+1Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818

1919
`B` - 初学者, `A` - 进阶
2020

21+
* `B` [数组](data-structures/Array)
2122
* `B` [单链表](data-structures/LinkedList)
2223
* `B` [双链表](data-structures/DoublyLinkedList)
2324
* `B` [队列](data-structures/Queue)

‎data-structures/Array/CMakeLists.txt

Copy file name to clipboard
+21Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
# Specify the minimum version of CMake required
2+
cmake_minimum_required(VERSION 3.10)
3+
4+
# Project name and version
5+
project(ArrayProject VERSION 1.0)
6+
7+
# Set C++ standard
8+
set(CMAKE_CXX_STANDARD 11)
9+
set(CMAKE_CXX_STANDARD_REQUIRED True)
10+
11+
# Include directories
12+
include_directories(include)
13+
14+
# Output executables to the 'bin' directory
15+
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/../bin)
16+
17+
# Add the test executable
18+
add_executable(test_Array __test__/test_Array.cpp)
19+
20+
# Link the Array library to the test executable
21+
target_link_libraries(test_Array)

‎data-structures/Array/README.md

Copy file name to clipboard
+3Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
# 数组
2+
3+
![数组](./assets/array.png)
+49Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
#include "../include/Array.h"
2+
#include <cassert>
3+
#include <iostream>
4+
5+
void test_array() {
6+
Array<int, 0> arr_0;
7+
assert(arr_0.size() == 0);
8+
assert(arr_0.empty() == true);
9+
try{
10+
arr_0.front();
11+
} catch(const std::underflow_error &e){
12+
std::cout << "front() throw an exception PASSED! " << e.what() << std::endl; // Expected
13+
}
14+
try{
15+
arr_0.back();
16+
} catch(const std::underflow_error &e){
17+
std::cout << "back() throw an exception PASSED! " << e.what() << std::endl; // Expected
18+
}
19+
20+
Array<int, 5> arr_5;
21+
assert(arr_5.size() == 5);
22+
assert(arr_5.empty() == false);
23+
try {
24+
assert(arr_5[0] == 0);
25+
assert(arr_5.at(4) == 0);
26+
arr_5.at(5);
27+
} catch (const std::out_of_range& e) {
28+
std::cout << "at() throw an exception PASSED! " << e.what() << std::endl; // Expected
29+
}
30+
for (int i = 0; i < 5; ++i) {
31+
arr_5[i] = i + 1;
32+
}
33+
assert(arr_5.front() == 1);
34+
assert(arr_5.back() == 5);
35+
assert(arr_5.at(2) == 3);
36+
assert(arr_5[3] == 4);
37+
arr_5[3] = 9;
38+
assert(arr_5[3] == 9);
39+
for(int i = 0; i < arr_5.size(); ++i){
40+
std::cout << arr_5[i] << " ";
41+
}
42+
std::cout << std::endl;
43+
std::cout << "All tests passed!" << std::endl;
44+
}
45+
46+
int main() {
47+
test_array();
48+
return 0;
49+
}
60.3 KB
Loading

‎data-structures/Array/build.sh

Copy file name to clipboard
+19Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
#!/bin/bash
2+
3+
# Create the build directory if it doesn't exist
4+
if [ ! -d "build" ]; then
5+
mkdir build
6+
fi
7+
8+
# Run CMake in the build directory
9+
cd build
10+
cmake ..
11+
12+
# Build the project using make
13+
make
14+
15+
# Return to the project root directory
16+
cd ..
17+
18+
# Inform the user where the executable can be found
19+
echo "Build complete. Executable located in the ./bin directory."

‎data-structures/Array/clean.sh

Copy file name to clipboard
+7Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
#!/bin/bash
2+
3+
# Remove build and bin directories
4+
rm -rf build
5+
rm -rf bin
6+
7+
echo "Clean complete. Build and bin directories removed."

‎data-structures/Array/include/Array.h

Copy file name to clipboard
+63Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
#ifndef ARRAY_H
2+
#define ARRAY_H
3+
4+
#include <cstddef>
5+
#include <stdexcept>
6+
7+
template <typename T, size_t N>
8+
class Array{
9+
public:
10+
Array();
11+
~Array() = default;
12+
public:
13+
// Capacity
14+
bool empty() const {return N == 0;}
15+
size_t size() const {return N;}
16+
// Element access
17+
T& front();
18+
T& back();
19+
T& at(const size_t index);
20+
T& operator[](const size_t index);
21+
private:
22+
T _data[N];
23+
};
24+
25+
// Element access
26+
template <typename T, size_t N>
27+
T& Array<T, N>::front(){
28+
if(N == 0){
29+
throw std::underflow_error("front(): This Array is empty.");
30+
}
31+
return _data[0];
32+
}
33+
34+
template <typename T, size_t N>
35+
T& Array<T, N>::back(){
36+
if(N == 0){
37+
throw std::underflow_error("back(): This Array is empty.");
38+
}
39+
return _data[N - 1];
40+
}
41+
42+
template <typename T, size_t N>
43+
T& Array<T, N>::at(const size_t index){
44+
if(index >= N){
45+
throw std::out_of_range("at(): Index out of range.");
46+
}
47+
return _data[index];
48+
}
49+
50+
template <typename T, size_t N>
51+
T& Array<T, N>::operator[](const size_t index){
52+
return _data[index];
53+
}
54+
55+
// Constructor
56+
template <typename T, size_t N>
57+
Array<T, N>::Array(){
58+
for(size_t i = 0; i < N; ++i){
59+
_data[i] = T();
60+
}
61+
}
62+
63+
#endif // ARRAY_H

‎data-structures/Queue/CMakeLists.txt

Copy file name to clipboardExpand all lines: data-structures/Queue/CMakeLists.txt
+1-1Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,5 +17,5 @@ set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/../bin)
1717
# Add the test executable
1818
add_executable(test_Queue __test__/test_Queue.cpp)
1919

20-
# Link the LinkedList library to the test executable
20+
# Link the Queue library to the test executable
2121
target_link_libraries(test_Queue)

‎data-structures/Stack/CMakeLists.txt

Copy file name to clipboardExpand all lines: data-structures/Stack/CMakeLists.txt
+1-1Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,5 +17,5 @@ set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/../bin)
1717
# Add the test executable
1818
add_executable(test_Stack __test__/test_Stack.cpp)
1919

20-
# Link the LinkedList library to the test executable
20+
# Link the Stack library to the test executable
2121
target_link_libraries(test_Stack)

0 commit comments

Comments
0 (0)
Morty Proxy This is a proxified and sanitized view of the page, visit original site.