C++学习笔记

3 篇文章 0 订阅
2 篇文章 0 订阅

依赖

Algorithms library

functions

std

std::swap() 交换
// swap algorithm example (C++98)
#include <iostream>     // std::cout
#include <algorithm>    // std::swap
#include <vector>       // std::vector

int main () {

  int x=10, y=20;                              // x:10 y:20
  std::swap(x,y);                              // x:20 y:10

  std::vector<int> foo (4,x), bar (6,y);       // 实例化两个vector 一个是foo 一个是bar
  //foo:4个20 bar:6个10
  std::swap(foo,bar);                          // foo:6个10 bar:4个20

  std::cout << "foo contains:";
  for (std::vector<int>::iterator it=foo.begin(); it!=foo.end(); ++it)
    std::cout << ' ' << *it;
  std::cout << '\n';

  return 0;
}

Question: for (std::vector<int>::iterator it=foo.begin(); it!=foo.end(); ++it)

foo contains: 10 10 10 10 10 10

常识

创建array

    int a[10] = {10,9,8,7,6,5,4,3,2,1};
	std::array<int, 5> arr = {1, 2, 3, 4, 5};

c++ array数组模板类使用

array模板类的声明
template <class T,size_t N> class array;

数组类是固定大小的序列容器,它们包含以严格线性序列排序的特定数量的元素。
数组类具有固定大小,并且不通过分配器管理其元素的分配,它们是封装固定大小元素数组的聚合类型。

array模板类的说明

array模板类中T为包含元素的类型(std::array::value_type),N为元素个数。

array模板类头文件

使用array模板类之前需要包含#include <array>头文件!

array模板类的使用

(1)Iterators

Iterators迭代器的作用是遍历array数组类中的元素。可以通过begin/end()、rbegin/rend()、cbegin/cend()、crbegin/crend()等函数进行访问。

rbegin/rend 是从相反方向进行遍历。

#include <iostream>
#include <array>
 
int main(void) {
    std::array<int, 5> arr = {1, 2, 3, 4, 5};
 
    std::cout << "array values: ";
    for (auto it = arr.begin(); it != arr.end(); ++it) {
        std::cout << *it << " ";
    }
    std::cout << std::endl;
 
    return 0;
}
————————————————
版权声明:本文为CSDN博主「zhengqijun_」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/zhengqijun_/article/details/81566109
array values: 1 2 3 4 5
容量,检测array大小Capacity

array数组容器的大小是固定的。可以通过sizeof()、size()、max_size()、empty()等函数进行检测。


int main(void) {
    std::array<int, 5> arr = {1, 2, 3, 4, 5};
 
    std::cout << "sizeof(array) = " << sizeof(arr) << std::endl;
    std::cout << "size of array = " << arr.size() << std::endl;
    std::cout << "max_size of array = " << arr.max_size() << std::endl;
 
    if (arr.empty()) {
        std::cout << "array is empty!" << std::endl;
    } else {
        std::cout << "array is not empty!" << std::endl;
    }
 
    return 0;

————————————————
版权声明:本文为CSDN博主「zhengqijun_」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/zhengqijun_/article/details/81566109
元素访问Element access

可以通过下标[ ]、at()、front()、back()、data()等函数访问array容器内的元素。

data 第一个元素指针Get pointer to first data


#include <iostream>
#include <array>
 
int main(void) {
    std::array<int, 5> arr = {1, 2, 3, 4, 5};
 
    std::cout << "array[0] = " << arr[0] << std::endl;
    std::cout << "array.at(4) = " << arr.at(4) << std::endl;
    std::cout << "array.front() = " << arr.front() << std::endl;
    std::cout << "array.back() = " << arr.back() << std::endl;
    std::cout << "&array: " << arr.data() << " = " << &arr << std::endl;
 
    return 0;
}
————————————————
版权声明:本文为CSDN博主「zhengqijun_」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/zhengqijun_/article/details/81566109

array[0] = 1
array.at(4) = 5
array.front() = 1
array.back() = 5
&array: 0x7ffd22df6e50 = 0x7ffd22df6e50
对array进行添加/交换Modifiers

可以使用fill()、swap()等函数对array容器整体进行操作。

reference:
https://blog.csdn.net/zhengqijun_/article/details/81566109?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522159076539619195265956476%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fall.%2522%257D&request_id=159076539619195265956476&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2allfirst_rank_ecpm_v1~pc_rank_v3-1-81566109.first_rank_ecpm_v1_pc_rank_v3&utm_term=c%2B%2B+array

cmakelist

自己添加cmake list 里面的路径。

cmake_minimum_required(VERSION 2.8 FATAL_ERROR)
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/../../cmake")

project(GPU_Computing_in_Robotics_tutorial_lesson_0)

#Include directory, where headers sit
include_directories("/home/lz/.conan/data/cuda/10.0.130/ar/stable/package/5ab84d6acfe1f23c4fae0ab88f26e3a396351ac9/cuda_toolkit/samples/common/inc/GL/")
# 设置含有PCLConfig.cmake的文件夹为PCL——DIR
set(PCL_DIR /home/lz/.conan/data/pcl/1.10.0/ar/stable/package/9bfdcfa2bb925892ecf42e2a018a3f3529826676/share/pcl-1.10/)
# 设置library文件夹
set(PCL_LIBRARIES /home/lz/.conan/data/pcl/1.10.0/ar/stable/package/9bfdcfa2bb925892ecf42e2a018a3f3529826676/lib)
set(PCL_INCLUDE_DIRS /home/lz/.conan/data/pcl/1.10.0/ar/stable/package/9bfdcfa2bb925892ecf42e2a018a3f3529826676/include/pcl-1.10)
set(PCL_LIBRARY_DIRS /home/lz/.conan/data/pcl/1.10.0/ar/stable/package/9bfdcfa2bb925892ecf42e2a018a3f3529826676/lib/)


find_package(OpenGL REQUIRED)
# find_package(GLUT REQUIRED)
find_package(PCL 1.10 REQUIRED) # /home/lz/.conan/data/pcl/1.10.0/ar/stable/package/9bfdcfa2bb925892ecf42e2a018a3f3529826676)
find_package(CUDA 7.5 REQUIRED)
find_package(CUDADevice 3.0 REQUIRED)
## OpenGL
FIND_PACKAGE(GLUT REQUIRED)

set_directory_properties( PROPERTIES COMPILE_DEFINITIONS "" )

include_directories(include)
include_directories(${PCL_INCLUDE_DIRS})
add_definitions(${PCL_DEFINITIONS})

set(CUDA_NVCC_FLAGS "${CUDA_NVCC_FLAGS} ${CUDADEVICE_NVCC_FLAGS} -Xptxas -v")

cuda_add_executable(lesson_0
	src/lesson_0_main.cpp
	src/cudaWrapper.cpp
	src/lesson_0.cu
)
target_link_libraries(lesson_0
	${OPENGL_LIBRARIES}
	${GLUT_LIBRARIES}
	${PCL_LIBRARIES}
)


修改一下PCLConfig.cmake

#remove this as soon as eigen is shipped with FindEigen.cmake
macro(find_eigen)
  set(EIGEN_INCLUDE_DIRS "/home/lz/Documents/eigen/include")
  set(Eigen_DIR "/home/lz/Documents/eigen/include/")

  if(PCL_ALL_IN_ONE_INSTALLER)
    message(STATUS "Debug (lei):" ${PCL_ROOT})
    # set(EIGEN_ROOT "${PCL_ROOT}/3rdParty/Eigen")
    set(EIGEN_ROOT "/home/lz/Documents/eigen/include")
    message(STATUS "Debug (lei):" ${EIGEN_ROOT})
  elseif(NOT EIGEN_ROOT)
    # get_filename_component(EIGEN_ROOT "/usr/include/eigen3" ABSOLUTE)
    get_filename_component(EIGEN_ROOT "/home/lz/Documents/eigen/include" ABSOLUTE)
  endif(PCL_ALL_IN_ONE_INSTALLER)

  set(ENV{PKG_CONFIG_PATH}  "/home/lz/Documents/eigen/prefix/share/pkgconfig")
  find_package(PkgConfig REQUIRED)
  pkg_search_module(Eigen3 3.3.90 REQUIRED eigen3) 

  find_package(Eigen3)
  if (EIGEN_FOUND)
    message(STATUS "Debug (lei): Libraries for Eigen3 found")
    message(STATUS "Debug (lei): Package Version: "${Eigen3_VERSION})
  else()
    # message(FATAL_ERROR "Debug: Failed to find Eigen3.")
    message(STATUS "Debug (lei): Failed to find Eigen3.")
    # 这里还是没有成功导入
  endif()

  if(PKG_CONFIG_FOUND)
    pkg_check_modules(PC_EIGEN eigen3)
  endif(PKG_CONFIG_FOUND)
  find_path(EIGEN_INCLUDE_DIRS Eigen/Core
    HINTS ${PC_EIGEN_INCLUDEDIR} ${PC_EIGEN_INCLUDE_DIRS} 
          "${EIGEN_ROOT}" "$ENV{EIGEN_ROOT}"
    PATHS "$ENV{PROGRAMFILES}/Eigen 3.3.90" "$ENV{PROGRAMW6432}/Eigen 3.3.90"
          "$ENV{PROGRAMFILES}/Eigen" "$ENV{PROGRAMW6432}/Eigen"   
    PATH_SUFFIXES eigen3 include/eigen3 include)
  find_package_handle_standard_args(eigen DEFAULT_MSG EIGEN_INCLUDE_DIRS)
  set(EIGEN_DEFINITIONS ${EIGEN_DEFINITIONS})
  # set(EIGEN_DEFINITIONS ${EIGEN_DEFINITIONS} -DEIGEN_USE_NEW_STDVECTOR 
  #    -DEIGEN_YES_I_KNOW_SPARSE_MODULE_IS_NOT_STABLE_YET)

  include_directories(SYSTEM ${EIGEN3_INCLUDE_DIRS})
  if (EIGEN_FOUND)
    message(STATUS "Debug (lei): Libraries for Eigen3 found")
    message(STATUS "Debug (lei): Package Version: "${Eigen3_VERSION})
  else()
    # message(FATAL_ERROR "Debug: Failed to find Eigen3.")
    message(FATAL_ERROR "Debug (lei): Failed to find Eigen3.")
  endif()
endmacro()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值