Rust 튜토리얼 목차

Chapter 4 - Conclusion

다음은 여러분들이 unsafe와 macro를 사용하여 문제를 해결해 보는 고급 문제입니다.

아래 주석을 참고하여 코드를 완성해보세요.

문제 설명:
두 개의 Vec 벡터를 더하는 프로그램을 작성하세요.

이때, 매크로를 사용하여 덧셈 작업을 수행하고, 벡터의 내부 데이터에 직접 접근하기 위해 unsafe를 사용하세요.

  1. 매크로를 사용하여 두 벡터의 덧셈을 수행하는 함수를 작성하세요.
  2. unsafe를 사용하여 벡터의 내부 데이터에 접근하고 값을 더하세요.

// 매크로를 사용하여 두 벡터의 덧셈을 수행하는 함수를 작성합니다.
macro_rules! add_vectors {
    ($vec1:expr, $vec2:expr) => {
        add_vectors_unsafe(&$vec1, &$vec2)
    };
}

fn main() {
    let vec1 = vec![1, 2, 3];
    let vec2 = vec![4, 5, 6];
    let result = add_vectors!(vec1, vec2);

    println!("벡터 덧셈 결과: {:?}", result);
}

fn add_vectors_unsafe(vec1: &[i32], vec2: &[i32]) -> Vec<i32> {
    // 벡터의 길이가 같은지 확인합니다.
    assert_eq!(vec1.len(), vec2.len());

    let mut result = Vec::with_capacity(vec1.len());

    // unsafe를 사용하여 벡터의 내부 데이터에 접근하고 값을 더합니다.
    let ptr1 = vec1.as_ptr();
    let ptr2 = vec2.as_ptr();
    for i in 0..vec1.len() {
        unsafe {
            result.push(*ptr1.add(i) + *ptr2.add(i));
        }
    }

    result
}