添加不带循环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,c++,arrays,loops,C++,Arrays,Loops,如果显式循环是不可能的,那么使用一个可能的隐式循环。让标准库为您做这件事 std::transform(a, a + 3, b, c, std::plus<int>{}); std::transform(a,a+3,b,c,std::plus{}); 如果您发现自己经常在相同大小的阵列上执行此操作,您甚至可以将其模板化: template<typename T, std::size_t N> void add_arrays( T (const &a)[N],
std::transform(a, a + 3, b, c, std::plus<int>{});
std::transform(a,a+3,b,c,std::plus{});
如果您发现自己经常在相同大小的阵列上执行此操作,您甚至可以将其模板化:
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>{});
}
模板
void add_数组(T(const&a)[N],T(const&b)[N],T(&c)[N]){
std::transform(a,a+N,b,c,std::plus{});
}
编译器会很好,帮你检查大小。你甚至不必停在那里。有很多方法可以使add_数组
在更多上下文中可用
说了这么多。尽量避免使用原始数组。默认使用
std::array
。它是原始数组上的薄包装,但它具有值语义。如果您出于某种目的需要一个固定的集合(比如说您正在做图形编程,所以您存储坐标),请尝试使用指定的类型来代替它。如果您确实想要无循环和性能,您可以尝试:
#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];
}
#包括
#包括
alignas(16)int32_t a[4]={1,2,3,0};
alignas(16)int32_-tb[4]={4,3,2,0};
alignas(16)int32_t c[4];
main()
{
__m128i simd_a=_mm_载荷_si128((u m128i*)a);
__m128i simd_b=_mm_load_si128((_m128i*)b);
//这里没有用于添加和性能的循环。
//
__m128i simd_c=_mm_add_epi32(simd_a,simd_b);
_mm_store_si128((_m128i*)c,simd_c);
std::cout你有什么反对循环的方法吗?我必须在我的项目中多次使用加法,因此我希望有一些优化的方法。例如,使用。这大致就是它的用途。std::valarray
是我想要的。我们再来一次。