C++学习笔记
依赖
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()