vector初始化

容器vector

痞子三分冷 提交于 2020-02-28 13:50:03
//容器vector,可以单方向扩展 //扩展的速度是以二倍的速度扩展 #include <iostream> #include <vector> using namespace std; int main() { vector<int> v;//定义一个空vector vector<int> v1(4);//定义一个大小为4的vector,初始值为0 vector<int> v2(4,6);//定义一个大小为4的vector,初始值为6 vector<int> v3{1,2,3,4,5};//定义一个vector,并初始化 for(auto x:v3) cout<<x; cout<<endl; cout<<v3[1];//获取元素的两种方式 cout<<v3.at(2); return 0; } //容器vector的一些基本操作 #include <iostream> #include <vector> using namespace std; int main() { vector<int> v; v.push_back(1); v.push_back(2); v.push_back(4);//在vector后追加数字 for(auto x:v) cout<<x; cout<<endl; v.resize(10);//重置大小,不赋值的话默认追加0 v[9]=8; v

C++11: std::call_once和std::one_flag

Deadly 提交于 2020-02-28 12:59:55
有时候我们需要的变量(variable)容器(container)只需要初始化一次,以容器(containter)为例子,可能只是需要向其中注入一次元素. 只打C++11开始标准库提供了 std::call_once() 和 std::once_flag 的组合可以帮助我们做到这一点. demo1: #include <iostream> #include <thread> #include <mutex> #include <vector> std::vector<int> vec; std::mutex mutex; std::once_flag flag; static int val = 0; void initialized_vec(std::vector<int>& vec) { for (int i = 0; i < 10; ++i) { vec.push_back(val++); } } void print_vec() { std::call_once(flag, initialized_vec, vec); std::lock_guard<std::mutex> auto_lock(mutex); for (const int& number : vec) { std::cout << number << " "; } std::cout << std:

C++_十六章_智能指针_关于string对象、string指针和空指针的总结_关于智能指针相互赋值会导致出现空字符的问题_标准模板库

允我心安 提交于 2020-02-28 10:55:18
目录 1、智能指针 2、关于string对象、string指针和空指针的总结 3、关于智能指针相互赋值会导致出现空字符的问题 4、标准模板库 1、智能指针 01) 在使用new为指针分配内存空间的时候,有可能会出现忘记添加delete或者是没有忘记但不执行delelte的情况 ,此时就会导致内存泄露,例如如下情况: 1 void remodel(std::string & str) 2 { 3 std::string * ps = new std::string(str); 4 double * pd1 = new double[8]; //new返回一个可以存储8个double行数据的地址,pd1是一个指针 5 ... 6 if(weird_thing()) 7 throw exception(); //如果执行此句,那么就有可能不执行下面的delete 8 str = *ps; 9 delete ps; 10 return; 11 } delete有可能不会被执行的情况 02)使用智能指针 (1)这三个智能指针模板(auto_ptr、unique_ptr和shared_ptr)都定义了类似指针的对象,可以将new获得的地址赋给这些对象。当智能指针过期时,其析构函数将使用delete  来释放内存。下图说明了常规指针和auto_ptr之间的差别.(unique

C++ Primer 5th 第11章 关联容器

一个人想着一个人 提交于 2020-02-25 20:43:28
练习11.1:描述map 和 vector 的不同。 map是关联容器,vector是顺序容器,关联容器与值无关,vector则与值密切相关 练习11.2:分别给出最适合使用 list、vector、deque、map以及set的例子。 list链表 vector动态数组 deque队列 map映射 set集合 练习11.3:编写你自己的单词计数程序。 #include <iostream> #include <map> void words_count() { std::map<std::string, std::size_t> m; std::string word; while (std::cin >> word) { ++m[word]; } } int main() { words_count(); return 0; } 练习11.4:扩展你的程序,忽略大小写和标点。例如,"example."、"example,"和"Example"应该递增相同的计数器。 #include <iostream> #include <map> void words_count() { std::map<std::string, std::size_t> m; std::string word; while (std::cin >> word) { for (auto& ch : word

拓扑排序

做~自己de王妃 提交于 2020-02-25 11:41:48
在图论中,拓扑排序(Topological Sorting)是一个有向无环图(DAG, Directed Acyclic Graph)的所有顶点的线性序列。且该序列必须满足下面两个条件: 每个顶点出现且只出现一次。 若存在一条从顶点 A 到顶点 B 的路径,那么在序列中顶点 A 出现在顶点 B 的前面。 有向无环图(DAG)才有拓扑排序,非DAG图没有拓扑排序一说。 拓扑排序常用的两个方法 1、减治技术 从 DAG 图中选择一个 没有前驱(即入度为0)的顶点并输出。 从图中删除该顶点和所有以它为起点的有向边。 重复 1 和 2 直到当前的 DAG 图为空或当前图中不存在无前驱的顶点为止。后一种情况说明有向图中必然存在环。 所以拓扑排序结果是1、2、4、3、5 通常,一个有向无环图可以有一个或多个拓扑排序序列。 2、基于DFS来实现 执行一次DFS遍历,并记住顶点变成死端(即退出遍历栈)的顺序,将该次序反过来就得到拓扑排序的一个解。当然在遍历时,不能遇到回边,如果遇到一条回边,该图就不是一个有向无环图,并且对它的顶点进行拓扑排序是不可能的。 当一个顶点v退出DFS栈时,在比v更早出栈的顶点中,不可能存在一个顶点u拥有一条边从u指向v,否则就构成了一个回边。所以在退栈次序的队列中,任何这样的顶点都会排在v的后面,并且在逆序中排在v的前面。 算法: (1)减治思想的程序

LeetCode001两数之和

大憨熊 提交于 2020-02-24 13:38:44
题目链接:https://leetcode-cn.com/problems/two-sum/ 看到题目第一想法是map,然后发现并不快,有另一种更简单的办法,在了解途中还学了一些其他的。 1、用unordered_map代替map,以散列代替map内部的红黑树实现,使其可以用来处理只映射而不按key排序的需求,速度比map快很多。—《算法笔记》 2、return {i, j} 是vector的列表初始化方法,相当于返回一个包含值为i和j的vector,用来减少代码长度 vector < int > twoSum ( vector < int > & nums , int target ) { map < int , int > m ; vector < int > ans ( 2 , - 1 ) ; ////用来承载结果,初始化一个大小为2,值为-1的容器ans for ( int i = 0 ; i < nums . size ( ) ; i ++ ) { if ( m . find ( target - nums [ i ] ) != m . end ( ) ) { ans [ 0 ] = m [ target - nums [ i ] ] ; ans [ 1 ] = i ; break ; } m [ nums [ i ] ] = i ; } return ans ; }

STL总结之vector

醉酒当歌 提交于 2020-02-21 17:01:47
STL中vector是通常作为数组使用,不过它更像一个动态数组,在实际项目开发中大量使用. 优点:存储空间连续,可以使用下标访问,时间复杂度O(1). 缺点:不适合从中间删除和添加元素. C++标准规定的vector模板声明: template < class T, class Allocator = allocator<T> > class vector; T : 存储的数据类型 Allocator : 存储空间分配器(默认为std::allocator<T>) 1)首先vector可以作为数组使用,因此我们可以在初始化vector时,指定元素个数和初始值. vector<int> v; //v中含有0个元素 vector<int> v(5); //v中含有5个元素 vector<int> v(5, 1); //v中含有5个元素,赋予初始值1 另外vector还可以通过其他方式构造: vector<int> third (v.begin(),v.end()); //通过v构造third vector<int> fourth (third); //通过copy构造 //通过数组进行初始化 int myints[] = {16,2,77,29}; vector<int> fifth (myints, myints + sizeof(myints) / sizeof(int) );

vector

人走茶凉 提交于 2020-02-19 10:48:24
版权声明:本文为CSDN博主「刘同学_0116」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。 原文链接: https://blog.csdn.net/weixin_41743247/article/details/90635931 文章目录 1. vector: 1.1 vector 说明 1.2 vector初始化: 1.3 vector对象的常用内置函数使用(举例说明) 2. 顺序访问vector的几种方式,举例说明 2.1. 对向量a添加元素的几种方式 2.2 从向量中读取元素 3.几个常用的算法 1. vector: 1.1 vector 说明 vector是向量类型,可以容纳许多类型的数据,因此也被称为容器 (可以理解为动态数组,是封装好了的类) 进行 vector 操作前应添加头文件 #include <vector> 1.2 vector初始化: 方式1. /*定义具有10个整型元素的向量(尖括号为元素类型名,它可以是任何合法的数据类型),不具有初值,其值不确定*/ vector<int>a(10); 方式2. //定义具有10个整型元素的向量,且给出的每个元素初值为1 vector<int>a(10,1); 方式3. //用向量b给向量a赋值,a的值完全等价于b的值 vector<int>a(b); 方式4 . /

C++ Primer(第五版)读书笔记 & 习题解答 --- Chapter 3

戏子无情 提交于 2020-02-19 01:05:09
Chapter 3.1 1. using声明具有如下的形式: using namespace::name; Chapter 3.2 1. C++标准一方面对库类型所提供的操作做了规定,另一方面也对库的实现做出了性能上的要求,所以,在一般的应用场合,标准库类型都有足够的效率。 2. 当用一个字符串字面值初始化string对象时,除了最后那个空字符外其他所有的字符都会被拷贝到新创建的string对象中去。 3. 如果使用等号初始化一个变量,实际上执行的是拷贝初始化。如果不使用等号,则执行的是直接初始化: string s1 = "hi, ya"; // 拷贝初始化 string s2(10, 'c'); // 直接初始化 4. 在执行读取string的操作时,string对象会自动忽略开头的空白(即空格符、换行符、制表符等)并从第一个真正的字符开始读起,直到遇见下一处空白为止: // 如果我们输入" Hello World! ",输出将是"Hello",没有任何空格 string s; cin >> s; cout << s << endl; 5. string::size_type是一个无符号类型的值,而且能足够存放下任何string对象的大小。需要注意的是,string类的size函数的返回值类型是string::size_type,由于它是一个无符号类型的值

最短路径问题

那年仲夏 提交于 2020-02-18 22:16:13
图论中的经典问题:给一个图,求出起点到终点的最短路径。 Graph Representation adjacency matrix i/j 0 1 2 3 4 0 \(\infty\) -1 4 \(\infty\) \(\infty\) 1 \(\infty\) \(\infty\) 3 2 2 2 \(\infty\) \(\infty\) \(\infty\) \(\infty\) \(\infty\) 3 \(\infty\) 1 5 \(\infty\) \(\infty\) 4 \(\infty\) \(\infty\) \(\infty\) -3 \(\infty\) 用 vector<vector<int>> g(n, vector<int>(n, INF)) 表示, g[i][j] 表示从顶点 \(i\) 到顶点 \(j\) 的权重,空间复杂度 \(O(|V|^2)\) ,适用于稠密图,用的不多; adjacency list 链表比较少用,基本都用动态数组: 0 (1,-1) (2,4) - - - 1 (2,3) (3,2) (4,2) - - 2 - - - - - 3 (1,1) (2,5) - - - 4 (3,-3) - - - - 用 vector<vector<pair<int, int>>> g 表示, g[i][j].first 表示从顶点 \