在C++中实现接收两个数组参数并逐元素求和的函数
嘿,我看你已经搞定Java版本的数组对应元素相加功能了,现在想把它搬到C里对吧?其实核心思路和Java完全一致,只是C在数组的处理上有一些细节差异,我来给你捋清楚几种靠谱的实现方式~
最推荐的方式:使用std::vector
C++里的std::vector就类似Java里的ArrayList,它会自动帮你管理内存,不用手动分配释放,安全性拉满。而且用它实现这个功能和Java的逻辑几乎一模一样,还能加个长度检查避免越界错误:
#include <vector> #include <stdexcept> // 用于抛出异常 std::vector<int> sumEqualLengthArrays(const std::vector<int>& firstArray, const std::vector<int>& secondArray) { // 先校验两个数组长度是否一致,防止越界访问 if (firstArray.size() != secondArray.size()) { throw std::invalid_argument("两个数组必须长度相等!"); } std::vector<int> result(firstArray.size()); for (size_t i = 0; i < firstArray.size(); ++i) { result[i] = firstArray[i] + secondArray[i]; } return result; }
为啥推荐这个版本?
- 用
const引用传递参数,避免不必要的数组拷贝,效率更高 vector自动处理内存,不用像原生数组那样担心内存泄漏或者越界- 加入了长度校验,比Java版本更严谨,能提前发现错误
如果一定要用原生数组的话
C++里原生数组不能直接作为函数返回值(本质上会退化成指针),所以有两种实现方式:
方式1:让调用方提供结果数组
这种方式需要调用者提前分配好存储结果的数组,函数负责填充内容:
#include <cstddef> // 用于size_t类型 void sumEqualLengthArrays(const int* firstArray, const int* secondArray, int* resultArray, size_t arrayLength) { for (size_t i = 0; i < arrayLength; ++i) { resultArray[i] = firstArray[i] + secondArray[i]; } }
调用示例:
int a[] = {1, 2, 3, 4, 5}; int b[] = {6, 7, 8, 9, 10}; int result[5]; sumEqualLengthArrays(a, b, result, 5);
方式2:动态分配数组返回指针
这种方式函数内部动态分配内存,返回指针,但一定要记得调用完后用delete[]释放内存,不然会造成内存泄漏:
#include <cstddef> int* sumEqualLengthArrays(const int* firstArray, const int* secondArray, size_t arrayLength) { int* resultArray = new int[arrayLength]; for (size_t i = 0; i < arrayLength; ++i) { resultArray[i] = firstArray[i] + secondArray[i]; } return resultArray; }
调用示例:
int* res = sumEqualLengthArrays(a, b, 5); // 使用res做一些操作 delete[] res; // 必须释放内存!
总的来说,除非你有特殊需求必须用原生数组,否则优先选std::vector的版本,它在代码可读性和安全性上都更优~
内容的提问来源于stack exchange,提问作者148146
相关产品推荐
相关产品推荐

