Modernize include/ceres headers to C++17 and Abseil conventions

- include/ceres/autodiff_manifold.h: Replace manual zero-initialization loops with value-initialization ({}) in PlusJacobian and MinusJacobian.
- include/ceres/dynamic_numeric_diff_cost_function.h: Replace std::vector with absl::FixedArray for temporary evaluation buffers and use std::copy_n instead of memcpy in Evaluate.
- include/ceres/numeric_diff_cost_function.h: Replace memcpy with std::copy_n in Evaluate.

Change-Id: I13b546458185d9fdd22b086094ca1072c57c40ed
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,