diff --git a/include/ceres/autodiff_manifold.h b/include/ceres/autodiff_manifold.h
index c3169f7..9e04928 100644
--- a/include/ceres/autodiff_manifold.h
+++ b/include/ceres/autodiff_manifold.h
@@ -203,15 +203,8 @@
 template <typename Functor, int kAmbientSize, int kTangentSize>
 bool AutoDiffManifold<Functor, kAmbientSize, kTangentSize>::PlusJacobian(
     const double* x, double* jacobian) const {
-  double zero_delta[kTangentSize];
-  for (int i = 0; i < kTangentSize; ++i) {
-    zero_delta[i] = 0.0;
-  }
-
-  double x_plus_delta[kAmbientSize];
-  for (int i = 0; i < kAmbientSize; ++i) {
-    x_plus_delta[i] = 0.0;
-  }
+  double zero_delta[kTangentSize] = {};
+  double x_plus_delta[kAmbientSize] = {};
 
   const double* parameter_ptrs[2] = {x, zero_delta};
 
@@ -231,10 +224,7 @@
 template <typename Functor, int kAmbientSize, int kTangentSize>
 bool AutoDiffManifold<Functor, kAmbientSize, kTangentSize>::MinusJacobian(
     const double* x, double* jacobian) const {
-  double y_minus_x[kTangentSize];
-  for (int i = 0; i < kTangentSize; ++i) {
-    y_minus_x[i] = 0.0;
-  }
+  double y_minus_x[kTangentSize] = {};
 
   const double* parameter_ptrs[2] = {x, x};
 
diff --git a/include/ceres/dynamic_numeric_diff_cost_function.h b/include/ceres/dynamic_numeric_diff_cost_function.h
index 55b7913..a25bd8f 100644
--- a/include/ceres/dynamic_numeric_diff_cost_function.h
+++ b/include/ceres/dynamic_numeric_diff_cost_function.h
@@ -40,6 +40,7 @@
 #include <type_traits>
 #include <vector>
 
+#include "absl/container/fixed_array.h"
 #include "absl/log/check.h"
 #include "ceres/dynamic_cost_function.h"
 #include "ceres/internal/eigen.h"
@@ -142,9 +143,10 @@
     }
 
     // Create local space for a copy of the parameters which will get mutated.
-    int parameters_size = accumulate(block_sizes.begin(), block_sizes.end(), 0);
-    std::vector<double> parameters_copy(parameters_size);
-    std::vector<double*> parameters_references_copy(block_sizes.size());
+    int parameters_size =
+        std::accumulate(block_sizes.begin(), block_sizes.end(), 0);
+    absl::FixedArray<double> parameters_copy(parameters_size);
+    absl::FixedArray<double*> parameters_references_copy(block_sizes.size());
     parameters_references_copy[0] = parameters_copy.data();
     for (size_t block = 1; block < block_sizes.size(); ++block) {
       parameters_references_copy[block] =
@@ -153,9 +155,9 @@
 
     // Copy the parameters into the local temp space.
     for (size_t block = 0; block < block_sizes.size(); ++block) {
-      memcpy(parameters_references_copy[block],
-             parameters[block],
-             block_sizes[block] * sizeof(*parameters[block]));
+      std::copy_n(parameters[block],
+                  block_sizes[block],
+                  parameters_references_copy[block]);
     }
 
     for (size_t block = 0; block < block_sizes.size(); ++block) {
diff --git a/include/ceres/numeric_diff_cost_function.h b/include/ceres/numeric_diff_cost_function.h
index 89ddda7..5889b70 100644
--- a/include/ceres/numeric_diff_cost_function.h
+++ b/include/ceres/numeric_diff_cost_function.h
@@ -160,6 +160,7 @@
 #ifndef CERES_PUBLIC_NUMERIC_DIFF_COST_FUNCTION_H_
 #define CERES_PUBLIC_NUMERIC_DIFF_COST_FUNCTION_H_
 
+#include <algorithm>
 #include <array>
 #include <memory>
 #include <type_traits>
@@ -261,9 +262,9 @@
         ParameterDims::GetUnpackedParameters(parameters_copy.data());
 
     for (int block = 0; block < kNumParameterBlocks; ++block) {
-      memcpy(parameters_reference_copy[block],
-             parameters[block],
-             sizeof(double) * ParameterDims::GetDim(block));
+      std::copy_n(parameters[block],
+                  ParameterDims::GetDim(block),
+                  parameters_reference_copy[block]);
     }
 
     internal::EvaluateJacobianForParameterBlocks<kMethod,
