对于STL--vector学习笔记感兴趣的读者,本文将提供您所需要的所有信息,我们将详细讲解stlvector,并且为您提供关于5.7(java学习笔记)Vector、Enumeration、Acti
对于STL--vector学习笔记感兴趣的读者,本文将提供您所需要的所有信息,我们将详细讲解stl vector,并且为您提供关于5.7(java学习笔记)Vector、Enumeration、Active Record 迁移 学习笔记、Angular input decorator学习笔记、BroadcastReceiver学习笔记的宝贵知识。
本文目录一览:- STL--vector学习笔记(stl vector)
- 5.7(java学习笔记)Vector、Enumeration
- Active Record 迁移 学习笔记
- Angular input decorator学习笔记
- BroadcastReceiver学习笔记
STL--vector学习笔记(stl vector)
<Vector>
vector<T>容器是包含T类型元素的序列容器,vector<T>容器的大小可以自动增长,从而可以包含任意数量的元素,只要元素超出vector当前的容量,就会自动分配更多的空间。
只能在vector容器尾部高效的删除或添加元素。可以方便灵活的代替数组存放元素。只要能够意识到,vector在扩展容量,以及在序列内部删除或添加元素时会产生一些开销;
但大多数情况下,代码不会明显变慢。
使用vector容器模板,需要在头文件用vector #include<vector>
1.初始化:
vector<int>a; //声明一个int型变量a
(容器中没有元素,所以没有分配空间,当添加第一个数据项时,会自动分配内存)
vector<int>a(5); //声明一个初始大小为5的向量
vector<int>a(5,1); //声明一个初始大小为5且初始值都为1的向量
vector<int>b(a); //声明并用向量a初始化向量b
Vector<int>b(a.begin(),a.begin()+3);//将a向量中从第0个到第二个(共三个)作为向量b的初始值
(1.vector<int>value(20)中的20表示元素个数,及容器开始时有20个元素,他们默认值为0.
2.vector<int>value{20}表示只有一个元素,并以20作为初始值)
可以直接使用数组来初始化向量
Int=n[]={1,2,3,4,5};
vector<int>a(n,n+5); //将数组n的前五个元素作为向量a的初始值
vector<int>a(&n[1],&n[4]); //将n[1]--n[4]范围的元素作为向量a的初始值
2、访问元素
vector的元素访问可以像操作普通数组一般:
如vector<int>value{1,2,3,4,5};
通过下标访问:cout<<value[0]<<’ ‘<<value[1]<<endl;(vector的索引从0开始和标准数组一样)
vector的成员函数front(),back()分别返回序列中的第一个和最后一个元素的引用
成员函数data()返回第一个指向数组的指针,他在内部被用来存储元素
例 auto p=value.data(); p是int*类型,一般来说data()返回vector<T>容器的T*类型的值。
Cout<<*p<<’ ‘<<*(p+1)<<endl; //输出 1 2
3、添加元素
push_back();在序列的尾端添加一个元素
例:
vector<int>value;
value.push_back(3.14);
emplace_back();
4、迭代器
//使用迭代器访问元素.
Vector<int>vec;
vector<int>::iterator it;
for(it=vec.begin();it!=vec.end();it++)
cout<<*it<<endl;
5、成员函数
Vector<int>vec;
vec.begin() //指向迭代器中第一个元素。
vec.end() //指向迭代器中末端元素的下一个,指向一个不存在元素。
vec.push_back(elem) //在尾部加入一个数据。
vec.pop_back() //删除最后一个数据。
vec.capacity() //vector可用空间的大小。
vec.size() //返回容器中数据个数。
vec.empty() //判断容器是否为空。
vec.front() //传回第一个数据。
vec.back() //传回最后一个数据,不检查这个数据是否存在。
vec.at(index) //传回索引idx所指的数据,如果idx越界,抛出out_of_range。
vec.clear() //移除容器中所有数据。
vec.erase(iterator) //删除pos位置的数据,传回下一个数据的位置。
vec.erase(begin,end) //删除[beg,end)区间的数据,传回下一个数据的位置。注意:begin和end为iterator
vec.insert(position,elem) //在pos位置插入一个elem拷贝,传回新数据位置。
vec.insert(position,n,elem) //在pos位置插入n个elem数据,无返回值。
vec.insert(position,begin,end) //在pos位置插入在[beg,end)区间的数据,无返回值。
5.7(java学习笔记)Vector、Enumeration
一.Vector
Vector类实现一个可扩展的数组对象。与数组一样,它包含可以使用整数索引访问。
它的基本操作方法add(int index, E element),get(int index),indexOf(Object o)等操作方法
与数组中的方法类似这里就不叙述了。
我们主要看一个方法:Enumeration<E> elements(),返回一个Enumeration接口类型。
二、Enumeration
Enumeration类型Iterator,这不过这个是比较古老的迭代器主要出现在jdk1.5之前.
Enumeration中只有两个方法:
hasMoreElements()用于判断该集合是否还有元素。
nexElement()返回下一个元素。
我们结合这两个来看下例子:
import java.util.Enumeration;
import java.util.Vector;
public class Test {
public static void main(String[] args) {
// TODO Auto-generated method stub
Vector<String> v = new Vector<>();
v.add("1");
v.add("2");
v.add("3");
Enumeration <String>enu = v.elements();
while(enu.hasMoreElements()){
System.out.println(enu.nextElement());
}
}
}
运行结果:
1
2
3
我们来看一个实现了Enumeration接口的子类StringTokenizer
首先这个子类实现了Enumeration接口,就可以迭代输出元素。
它的作用类似字符串中split,可以用于分割字符。
import java.util.Enumeration;
import java.util.StringTokenizer;
import java.util.Vector;
public class Test {
public static void main(String[] args) {
// TODO Auto-generated method stub
String com = "google.com;baidu.com;bing.com";
StringTokenizer enu = new StringTokenizer(com,";");//指定分隔符为";",被分割字符串为com
while(enu.hasMoreElements()){ //只传字符串默认分割符为空格
System.out.println(enu.nextElement());
}
}
}
import java.util.Enumeration;
import java.util.StringTokenizer;
import java.util.Vector;
public class Test {
public static void main(String[] args) {
// TODO Auto-generated method stub
String com = "google.com;baidu.com;bing.com";
StringTokenizer enu = new StringTokenizer(com,";");
while(enu.hasMoreElements()){
System.out.println(enu.nextElement());
}
}
}
运行结果:
google.com
baidu.com
bing.com
对于这些我们只需了解即可,在遇到比较古老的项目的时候,里面可能会出现这些。
Active Record 迁移 学习笔记
Chage 方法是最常使用的方法
▪ add_column
▪ add_foreign_key
▪ add_index
▪ add_reference
▪ add_timestamps
▪ change_column_default(必须提供 :from 和 :to 选项)
▪ change_column_null
▪ create_join_table
▪ create_table
▪ disable_extension
▪ drop_join_table
▪ drop_table(必须提供块)
▪ enable_extension
▪ remove_column(必须提供字段类型)
▪ remove_foreign_key(必须提供第二个数据表)
▪ remove_index
▪ remove_reference
▪ remove_timestamps
▪ rename_column
▪ rename_index
▪ rename_table
Angular input decorator学习笔记
https://angular.io/api/core/Input
Input decorator只能用在Angular class字段里, 用于指定元数据,将class字段指定成input property.
Decorator that marks a class field as an input property and supplies configuration metadata. The input property is bound to a DOM property in the template. During change detection, Angular automatically updates the data property with the DOM property’s value.
参数名称:The name of the DOM property to which the input property is bound.
看个例子:
看个例子:
@Component({
selector: ''bank-account'',
template: `
Bank Name: {{bankName}}
Account Id: {{id}}
`
})
class BankAccount {
// This property is bound using its original name.
@Input() bankName: string;
// this property value is bound to a different property name
// when this component is instantiated in a template.
@Input(''account-id'') id: string;
// this property is not bound, and is not automatically updated by Angular
normalizedBankName: string;
}
@Component({
selector: ''app'',
template: `
<bank-account bankName="RBC" account-id="4747"></bank-account>
`
})
class App {}
子组件的模板里,显示bankName和id两个模型字段。
这两个字段,加上了@Input装饰器,表明其数据源,需要外部消费者传入(通常是消费这个子组件的父组件)
父组件的传值方式:
测试截图:
加了中括号后,表明等号右边的是一个表达式,不能当成普通字符串对待。
做个实验,如果删除子Component里的@Input:
最后什么也无法显示出来:
更多Jerry的原创文章,尽在:“汪子熙”:
本文同步分享在 博客“汪子熙”(CSDN)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。
BroadcastReceiver学习笔记
BroadcastReceiver 注册过程
BroadcastReceiver 注册的过程大致如下图所示:
+----------------+ +-------------+ +-------------------------+ +------------------------+
| ContextWrapper | | ContextImpl | | LoadedApk(mPackageInfo) | | ActivityManagerService |
+-----+----------+ +------+------+ +------------+------------+ +---------------+--------+
| | | |
| | | |
registerReceiver| | | |
| | | |
+---------------> | | |
| registerReceiver| | |
| | | |
+------------------------> | |
| | getReceiverDispatcher | |
| | | |
| +---------------------------> |
| | | |
| | [IIntentReceiver] | |
| | | |
| <---------------------------+ registerReceiver |
| | | |
| +------------------------------------------------------------->
| | | |
| | | |
v v v v
调用ContextWrapper的registerReceiver方法,然后传入receiver实例和filter实例。
调用ContextImpl的registerReceiverInternal方法, 由LoadedApk类将context、receiver、scheduler(receiver所在进程的handler)等包装成ReceiverDispatcher类。并将其内部类IIntentReceiver返回,传给ActivityManagerService进行注册。
LoadeApk中与BroadcastReceiver注册相关的类结构图如下所示:
+-------------------------------------------------------------+
| LoadedApk |
| |
| +-------------------+ |
| | mReceivers | +-----------------------+ |
| +-------------------+ | receiver1->dispatcher | |
| | context(Activity)+--------> | |
| | | | receiver2->dispatcher | |
| | context | | | |
| | | | receiver3->dispatcher | |
| | context | | | |
| | | | ... | |
| | ... | +-----------------------+ |
| +-------------------+ |
| |
| |
+-------------------------------------------------------------+
LoadedApk中保存着context与其注册的各个receiver的对应关系,同时也保存着每个receiver与其dispatcher的对应关系。
dispatcher中的IIntentReceiver是与ActivityManagerService沟通的桥梁。其内部结构如下图所示:
+--------------------------------------------------+
| ReceiverDispatcher |
| +-------------------------------------------+ |
| | InnerReceiver extends IIntentReceiver.Stub| |
| +-------------------------------------------+ |
| |
| BroadcastReceiver mReceiver; |
| Context mContext; |
| Handler mActivityThread; |
| |
+--------------------------------------------------+
ActivityManagerService在其registerReceiver方法中,将传入的IIntentReceiver和filter以及caller保存成如下所示的结构:
+---------------------------------------------------------------------------+
| |
| ActivityManagerService |
| +---------------------+ |
| | ReceiverList | |
| +-------------+ +---------------------+ |
| +-->InnerReceiver+--> BroadcastFilter1 | |
| +---------------------+ | +-------------+ | | |
| | mRegisteredReceivers+--+ | BroadcastFilter2 | |
| +---------------------+ | | | |
| | +-------------+ | ... | |
| +-->InnerReceiver| +---------------------+ |
| | +-------------+ |
| | |
| | |
| +--> ... |
| |
| |
| +------------------+ |
| +-------------------+ | BroadcastFilter1 | |
| | mReceiverResolver +---> | |
| +-------------------+ | BroadcastFilter2 | |
| | | |
| | ... | |
| +------------------+ |
| |
+---------------------------------------------------------------------------+
保存成这种结构的原因是为后面发送Broadcast提供高效的实现。
Broadcast 发送过程
今天关于STL--vector学习笔记和stl vector的分享就到这里,希望大家有所收获,若想了解更多关于5.7(java学习笔记)Vector、Enumeration、Active Record 迁移 学习笔记、Angular input decorator学习笔记、BroadcastReceiver学习笔记等相关知识,可以在本站进行查询。
本文标签: