diff --git a/include/ceres/autodiff_manifold.h b/include/ceres/autodiff_manifold.h index c3169f756..9e0492899 100644 --- a/include/ceres/autodiff_manifold.h +++ b/include/ceres/autodiff_manifold.h @@ -203,15 +203,8 @@ struct MinusWrapper { template bool AutoDiffManifold::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 @@ bool AutoDiffManifold::PlusJacobian( template bool AutoDiffManifold::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 55b79136a..a25bd8fbf 100644 --- a/include/ceres/dynamic_numeric_diff_cost_function.h +++ b/include/ceres/dynamic_numeric_diff_cost_function.h @@ -40,6 +40,7 @@ #include #include +#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 @@ class DynamicNumericDiffCostFunction final : public DynamicCostFunction { } // 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 parameters_copy(parameters_size); - std::vector parameters_references_copy(block_sizes.size()); + int parameters_size = + std::accumulate(block_sizes.begin(), block_sizes.end(), 0); + absl::FixedArray parameters_copy(parameters_size); + absl::FixedArray 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 @@ class DynamicNumericDiffCostFunction final : public DynamicCostFunction { // 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 89ddda7e5..5889b70db 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 #include #include #include @@ -261,9 +262,9 @@ class NumericDiffCostFunction final 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