// 매크로를 사용하여 두 벡터의 덧셈을 수행하는 함수를 작성합니다.
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
}