하지 않고 배열을 추가 우리가 예를 들어 ++ C에서 명시 적 루프를 작성하지 않고 동일한 크기의 두 개의 배열을 추가 할 방법 : 명시 적 루프가 문제를 벗어나면루프 C++
int a[3]={1,2,3};
int b[3]={4,3,2};
int c[3]; //to contain sum of a and b
하지 않고 배열을 추가 우리가 예를 들어 ++ C에서 명시 적 루프를 작성하지 않고 동일한 크기의 두 개의 배열을 추가 할 방법 : 명시 적 루프가 문제를 벗어나면루프 C++
int a[3]={1,2,3};
int b[3]={4,3,2};
int c[3]; //to contain sum of a and b
, 다음을 사용 암시적일 수도있다. 표준 라이브러리가 대신 해줍니다.
template<typename T, std::size_t N>
void add_arrays(T (const &a)[N], T (const &b)[N], T (&c)[N]) {
std::transform(a, a + N, b, c, std::plus<T>{});
}
컴파일러 좋을 것입니다 당신을 위해 크기를 확인하십시오
std::transform(a, a + 3, b, c, std::plus<int>{});
자신은 종종 같은 크기의 배열에 그 일을 찾을 경우
, 당신도 그것을 템플리트화할 수 있습니다. 그리고 거기서 멈출 필요조차 없습니다. 더 많은 문맥에서add_arrays
을 사용할 수있게하는 많은 방법이 있습니다.
모든 것을 말한 것. 원시 어레이 사용을 중단하십시오. 기본값으로 std::array
을 사용하십시오. 원시 배열에 비해 얇은 래퍼이지만 값 의미를가집니다. 그리고 어떤 목적으로 고정 된 컬렉션이 필요하다면 (좌표를 저장하기 위해 그래픽 프로그래밍을하고 있다고합시다) 대신 지정된 유형을 사용하십시오.
여기 우리는 다시 간다. – Bathsheba
당신이 정말로 더 루프를 을하지 않으 당신은 그것을 시도 할 수성능 :
더 심각 벡터 스몰하고 성능이 진짜 문제가있는 경우는 SIMD를 사용할 수 있는지#include <emmintrin.h>
#include <iostream>
alignas(16) int32_t a[4] = {1, 2, 3, 0};
alignas(16) int32_t b[4] = {4, 3, 2, 0};
alignas(16) int32_t c[4];
main()
{
__m128i simd_a = _mm_load_si128((__m128i*)a);
__m128i simd_b = _mm_load_si128((__m128i*)b);
// No loop for addition and performance is here.
//
__m128i simd_c = _mm_add_epi32(simd_a, simd_b);
_mm_store_si128((__m128i*)c, simd_c);
std::cout << "\n" << c[0] << " " << c[1] << " " << c[2] << " " << c[3];
}
. 혼동하지 말고 사용 가능한 우수한 라이브러리 중 하나를 사용하십시오. 같은 C++ 라이브러리의
예 :
당신은 루프에 대해 무엇을해야합니까? –
프로젝트에서 여러 번 추가해야하므로 최적화 된 방법이 필요했습니다. –
예 : ['std :: valarray'] (http://en.cppreference.com/w/cpp/numeric/valarray). 이것은 대략 *에 대한 것입니다. –