美文网首页
C++ 使用指针交换array

C++ 使用指针交换array

作者: FredricZhu | 来源:发表于2024-03-07 11:34 被阅读0次

    注意本例的第二种方法只是交换了指针的地址,并没有交换原始数组中的值。
    但是可以使用指针来访问原数组中的值,效果是一样的。
    代码如下,

    CMakeLists.txt

    cmake_minimum_required(VERSION 3.3)
    
    project(72_swapping_array_data_pointer_math)
    
    set(ENV{PKG_CONFIG_PATH} "$ENV{PKG_CONFIG_PATH}:/usr/local/lib/pkgconfig/")
    
    set ( CMAKE_CXX_FLAGS "-pthread")
    set(CMAKE_CXX_STANDARD 20)
    add_definitions(-g)
    
    include(${CMAKE_BINARY_DIR}/conanbuildinfo.cmake)
    conan_basic_setup()
    
    include_directories(${INCLUDE_DIRS})
    LINK_DIRECTORIES(${LINK_DIRS})
    
    file( GLOB main_file_list ${CMAKE_CURRENT_SOURCE_DIR}/*.cpp) 
    
    foreach( main_file ${main_file_list} )
        file(RELATIVE_PATH filename ${CMAKE_CURRENT_SOURCE_DIR} ${main_file})
        string(REPLACE ".cpp" "" file ${filename})
        add_executable(${file}  ${main_file})
        target_link_libraries(${file} ${CONAN_LIBS} pthread)
    endforeach( main_file ${main_file_list})
    

    conanfile.txt

    [requires]
    boost/1.72.0
    
    [generators]
    cmake
    

    main.cpp

    #include <iostream>
    #include <algorithm>
    
    struct print_array {
    
        template<typename T, std::size_t N>
        void operator()(T (&arr) [N]){
            std::for_each(std::begin(arr), std::end(arr), [](T const& ele) {
                std::cout << ele << " ";
            });
    
            std::cout << std::endl;
        }
    
    
        template<typename T>
        void operator()(T* arr, int n){
            std::for_each(arr, arr+n, [](T const& ele) {
                std::cout << ele << " ";
            });
    
            std::cout << std::endl;
        }
    };
    
    
    struct assign_array {
        template <typename T, std::size_t N>
        void operator()(T (&arr0) [N], T (&arr1) [N]) {
            // arr0 = arr1 
            std::transform(std::begin(arr1), std::end(arr1), std::begin(arr0), [](int const& ele){
                return ele;
            });
        }
    };
    
    int main(int argc, char* argv[]) {
        int arr0[5] {1, 2, 3, 4, 5};
        int arr1[5] {6, 7, 8, 9, 10};
    
        int* p_arr0{arr0};
        int* p_arr1{arr1};
        print_array pt;
        std::cout << "arr0: ";
        pt(arr0);
        std::cout << "arr1: ";
        pt(arr1); 
    
        // swapping data the hard way
        int temp[5];
        assign_array assgin;
        assgin(temp, arr1);
        assgin(arr1, arr0);
        assgin(arr0, temp);
        
        std::cout << "After swap: " << std::endl;
        std::cout << "arr0: ";
        pt(arr0);
        std::cout << "arr1: ";
        pt(arr1); 
    
    
        int* p_temp{nullptr};
        p_temp = p_arr1;
        p_arr1 = p_arr0;
        p_arr0 = p_temp;
    
        std::cout << "Swap again: " << std::endl;
        std::cout << "arr0: ";
        pt(p_arr0, std::size(arr0));
        std::cout << "arr1: ";
        pt(p_arr1, std::size(arr1));
    
        return EXIT_SUCCESS;
    }
    

    程序输出如下,


    image.png

    相关文章

      网友评论

          本文标题:C++ 使用指针交换array

          本文链接:https://www.haomeiwen.com/subject/qubszdtx.html