vector初始化

C++的vector容器清空

时间秒杀一切 提交于 2019-12-23 00:21:47
  c++内部STL库中自带了一个容器vetcor, 自带了清空方法——clear()。但是clear使用之后,并不能清空数据,其数据再未被覆盖之前是不会改变的,个人猜测clear仅仅把指针挪动到了起始位置,所以需要清空置值的话,就需要配合上resize方法,resize重分配之后是可以直接 [ ] 访问的。    reszie有被重载过一次,有两种实现方式:     1、void resize( std::size_t __new_size, int __x);     2、void resize( std::size_t __new_size);   多出来的x是想初始化后生成的数,(其实个人感觉gcc里的函数声明的原型应该是这样的 void resize( std::size_t __new_size, int __x = 0); 默x为0) 当然,也可以用循环的方式进行清空。(目前只能想到这些)   如果想要清空二维的vetcor,那就得一行行的clear和resize。 学习不易,诸君共勉! 来源: https://www.cnblogs.com/daker-code/p/12008620.html

vector数组初始化的几个点

会有一股神秘感。 提交于 2019-12-22 04:41:52
关于vector动态数组的几个问题; 关于数组的初始化:` 普通数组像: int [ ]={1,2,3,4,5,6,7,8}; vector也可进行诸如此类的数组初始化: 像是: # include <iostream> # include <vector> using namespace std ; int main ( ) { vector < int > array = { 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 } ; vector < int > :: iterator it ; for ( it = array . begin ( ) ; it != aray . end ( ) ; ++ it ) { cout << * it ; //迭代器数组遍历; } //也可以像这样遍历数组; /*for(int i=0;i<array.size();++i) { cout<<array[i];//这样方便我找数组的下标 }*/ return 0 ; } 我的第一篇博客…… 来源: CSDN 作者: リヴァイ兵长 链接: https://blog.csdn.net/qq_45337491/article/details/103645872

C++ STL算法系列2---find ,find_first_of , find_if , adjacent_find的使用

主宰稳场 提交于 2019-12-22 02:11:10
一.find运算 假设有一个int型的vector对象,名为vec,我们想知道其中 是否包含某个特定值 。 解决这个问题最简单的方法时使用标准库提供的find运算: 1 // value we'll look for 2 int search_value = 42; 3 4 //call find to see if that value is present 5 vector<int>::const_iterator result = find(vec.begin() , vec.end() , search_value); 6 7 //report the result 8 cout<<"The value "<<search_value 9 <<(result == vec.end() ? " is not present" : "is present") 10 <<endl; 具体实现代码: 1 #include<iostream> 2 #include<vector> 3 #include<algorithm> 4 using namespace std; 5 6 int main() 7 { 8 // value we'll look for 9 int search_value = 42; 10 int ival; 11 vector<int> vec; 12 13

C++ STL基本容器的使用

僤鯓⒐⒋嵵緔 提交于 2019-12-21 21:05:52
  C++中有两种类型的容器:顺序容器和关联容器。顺序容器主要有vector、list、deque等。其中vector表示一段连续的内存,基于数组实现,list表示非连续的内存,基于链表实现,deque与vector类似,但是对首元素提供插入和删除的双向支持。关联容器主要有map和set.map是key-value形式,set是单值。map和set只能存放唯一的key,multimap和multiset可以存放多个相同的key.   容器类自动申请和释放内存,因此无需new和delete操作。   一、vector   vector基于模板实现,需包含头文件vector.   1.定义和初始化   //1.定义和初始化   vector vec1; //默认初始化,vec1为空   vector vec2(vec1); //使用vec1初始化vec2   vector vec3(vec1.begin(),vec1.end());//使用vec1初始化vec2   vector vec4(10); //10个值为的元素   vector vec5(10,4); //10个值为的元素   //2.常用操作方法   vec1.push_back(100); //添加元素   int size = vec1.size(); //元素个数   bool isEmpty = vec1

STL 总结

爱⌒轻易说出口 提交于 2019-12-20 11:52:46
发现stl还是很好用的。。。。学过以后,po一发博客便于以后复习和加深记忆和理解 首先对迭代器加以说明 C++ primer (中文版第四版)第273页 9.3.2 begin和end成员 begin和end操作产生指向容器内第一个元素和最后一个元素的下一个位置的迭代器,如下所示。这两个迭代器通常用于标记包含容器中所有元素的迭代范围。       c.begin() 返回一个迭代器,它指向容器c的第一个元素       c.end() 返回一个迭代器,它指向容器c的最后一个元素的下一个位置       c.rbegin() 返回一个反向迭代器,它指向容器c的最后一个元素       c.rend() 返回一个反向迭代器,它指向容器c的第一个元素前面的位置 上述每个操作都有两个不同的版本:一个是const成员,另一个是非const成员。这些操作返回什么类型取决于容器是否为const。如果容器不是const,则这些操作返回iterator或reverse_iterator类型。如果容器是const,则其返回类型要加上const_前缀,也就是const_iterator和const_reverse_iterator类型。          其次,说明一下,定义在algorithm中的固有stl函数,find 和 count; <1>find 函数,返回值类型为找到元素的迭代器

Eigen 中四元数、欧拉角、旋转矩阵、旋转向量

这一生的挚爱 提交于 2019-12-20 03:59:22
一、旋转向量 1.0 初始化旋转向量:旋转角为alpha,旋转轴为(x,y,z) Eigen::AngleAxisd rotation_vector(alpha,Vector3d(x,y,z)) 1.1 旋转向量转旋转矩阵 Eigen::Matrix3d rotation_matrix; rotation_matrix=rotation_vector.matrix(); Eigen::Matrix3d rotation_matrix; rotation_matrix=rotation_vector.toRotationMatrix(); 1.2 旋转向量转欧拉角(Z-Y-X,即RPY) Eigen::Vector3d eulerAngle=rotation_vector.matrix().eulerAngles(2,1,0); 1.3 旋转向量转四元数 Eigen::Quaterniond quaternion(rotation_vector); Eigen::Quaterniond quaternion;Quaterniond quaternion; Eigen::Quaterniond quaternion;quaternion=rotation_vector; 二、旋转矩阵 2.0 初始化旋转矩阵 Eigen::Matrix3d rotation_matrix;

openMP的一点使用经验

﹥>﹥吖頭↗ 提交于 2019-12-20 00:42:35
最近在看多核编程。简单来说,由于现在电脑CPU一般都有两个核,4核与8核的CPU也逐渐走入了寻常百姓家,传统的单线程编程方式难以发挥多核CPU的强大功能,于是多核编程应运而生。按照我的理解,多核编程可以认为是对多线程编程做了一定程度的抽象,提供一些简单的API,使得用户不必花费太多精力来了解多线程的底层知识,从而提高编程效率。这两天关注的多核编程的工具包括openMP和TBB。按照目前网上的讨论,TBB风头要盖过openMP,比如openCV过去是使用openMP的,但从2.3版本开始抛弃openMP,转向TBB。但我试下来,TBB还是比较复杂的,相比之下,openMP则非常容易上手。因为精力和时间有限,没办法花费太多时间去学习TBB,就在这里分享下这两天学到的openMP的一点知识,和大家共同讨论。 openMP支持的编程语言包括C语言、C++和Fortran,支持OpenMP的编译器包括Sun Studio,Intel Compiler,Microsoft Visual Studio,GCC。我使用的是Microsoft Visual Studio 2008,CPU为Intel i5 四核,首先讲一下在Microsoft Visual Studio 2008上openMP的配置。非常简单,总共分2步: (1) 新建一个工程。这个不再多讲。 (2) 建立工程后,点击 菜单栏-

LintCode 601: Flatten 2D Vector (iterator经典题)

陌路散爱 提交于 2019-12-19 00:57:13
Flatten 2D Vector Implement an iterator to flatten a 2d vector. Example Example 1: Input:[[1,2],[3],[4,5,6]] Output:[1,2,3,4,5,6] Example 2: Input:[[7,9],[5]] Output:[7,9,5] 注意这题不能用一个2D vector的copy,不然空间不满足要求。 解法1:利用C++的iterator 这题学到了很多iterator的知识。 一维和二维vector都有iterator,一维vector的iterator就好比指向每个元素的指针,二维vector的iterator就好比指向其中每个一维vector的指针。 空的一维和二维vector的begin()和end()相等。 *(iter++)先返回*iter,然后iter++。 跟*(i++)一回事。 iter像指针,但不能与指针比较。一个未初始化的iter不能与NULL比较。如果非要初始化,可将其初始化为对应container的end()。 即vector a = {1,2,3,4,5}; vector::iterator iter = a.end(); 代码如下: class Vector2D { public : Vector2D ( vector < vector <

容器————vector

浪子不回头ぞ 提交于 2019-12-18 20:46:50
目录 一、介绍 二、声明及初始化 三、方法 front find remove erase substr 一、介绍 向量 vector 是一种对象实体, 能够容纳许多其他类型相同的元素, 因此又被称为容器。 与string相同, vector 同属于STL(Standard Template Library, 标准模板库)中的一种自定义的数据类型, 可以广义上认为是数组的增强版。 在使用它时, 需要, #include<vector> vector 容器与数组相比其优点在于它能够 根据需要随时自动调整自身的大小以便容下所要放入的元素 。此外, vector 也提供了许多的方法来对自身进行操作。 二、声明及初始化 vector<int> a ; //声明一个int型向量a vector<int> a(10) ; //声明一个初始大小为10的向量 vector<int> a(10, 1) ; //声明一个初始大小为10且初始值都为1的向量 vector<int> b(a) ; //声明并用向量a初始化向量b vector<int> b(a.begin(), a.begin()+3) ; //将a向量中从第0个到第2个(共3个)作为向量b的初始值 使用数组进行初始化: 1 int n[] = {1, 2, 3, 4, 5} ; 2 vector<int> a(n, n+5) ; /

什么是C ++函子及其用途?

≡放荡痞女 提交于 2019-12-18 16:54:11
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 我不断听到很多有关C ++中的函子的信息。 有人可以概述一下它们是什么,在什么情况下会有用吗? #1楼 对于我们中间的像我这样的新手:经过一番研究,我发现jalf发布的代码做了什么。 函子是可以像函数一样被“调用”的类或结构对象。 通过重载 () operator 可以实现这一点。 () operator (不确定其调用的名称)可以接受任意数量的参数。 其他运算符仅取两个,即 + operator 只能取两个值(运算符的每一侧一个)并返回您为其重载的任何值。 您可以在 () operator 内放入任意数量的参数,这就是它的灵活性。 首先要创建函子,请先创建类。 然后,使用您选择的类型和名称的参数为类创建一个构造函数。 在同一条语句中紧随其后的是一个初始化器列表(它使用单个冒号运算符,这对我来说也是很新的东西),该列表使用构造函数的先前声明的参数构造类成员对象。 然后 () operator 被重载。 最后,您声明已创建的类或结构的私有对象。 我的代码(我发现jalf的变量名令人困惑) class myFunctor { public: /* myFunctor is the constructor. parameterVar is the parameter passed to the constructor