- 刚刚看到有关size()的返回值问题,下面是有关的的内容:
- 希望看了下面的会有所理解
- 讲的是定容栈的(这个不了解不重要)size():
- 数组类型的实现代码:
-
public class FixedCapacityStackOfString { private String[] a;//stack entries private int N; //size public FixedSapacityStackOfString(int cap) { a= new String[cap]; } public boolean isEmpty () { return N==0; } public int size() { return N; } public void push(String item) { a[N++]=item;} public String pop() { return a[--N];} }
这个可以比较map等的push,pop操作
-
解释:它的实例变量为一个用于保存栈中的元素的数组a[ ],和一个用于保存栈中的元素数量的整数N。要删除一个元素,我们将N减1
-
并返回a[N]。要添加一个元素,我们将a[N]设为新元素并将N加1。这些操作能保证以下性质:
-
数组中的元素顺序和它们被插的顺序相同;
-
当N为0时栈为空;
-
栈的顶部位于a[N-1](如果栈非空)---》这一定程度解释了下面sort(a.begin(),a.end());排序排的是a【0】到a【N-1】的位置
-
FixedCapacityStackOfString 的测试用例轨迹 StdIn(push) StdOut(pop) N 0 1 2 3 4 0 to 1 to be 2 to be or 3 to be or not 4 to be or not to 5 to be or not to
-
-
以上内容摘自书中部分,知识或可有所欠缺
vec.erase(vec.begin()+2);删除第3个元素//因为begin()指向第一个元素,begin()+1指向第二个元素,以此类推
vec.erase(vec.begin()+i,vec.begin()+j);删除区间[i,j-1];区间从0开始//这里的后一个begin与上面的有点不同
vec.erase(vec.begin()+i,vec.begin()+j)这里的begin指向位置,及begin+x的指向位置(前后的begin有差别)与下面的upper_bound 及lower_bound都点相似
如vec 里存有1 2 3 4 5 6
执行vec.erase(vec.begin()+1,vec.begin()+3)删除的是2 3 这两个数
upper_bound,lower_bound
-
如有一个dp数组存有1 2 3 3 5 5
-
upper_bound就是,如果dp里面有要找的 数,则返回最这个数字最右边的位置+1
-
如int a=upper_bound(dp,dp+3,3)-dp 在dp数组里找3,3最又边的位置是dp【4】的位置,所以返回的dp【5】的位置
-
所以a=5
-
如果dp里没有这个数字的话,返回的是仅小于要查的数字的数字所在位置+1
-
如int a=upper_bound(dp,dp+3,4)-dp
-
这语句是在数组中的dp[0]到dp[3]找4这个数字,因为没找到,这里仅小于4的数字的是在a[3] 位置的3,返回的是dp[3]+1这个位置
-
而lower_bound返回的
-
如果数组里有要查的数的话则返回这个数最小的位置
-
如int a=lower_bound(dp,dp+3,3)-dp 这里的a=3
-
如果数组里没有这个数的则返回仅小于这个数的位置+1
-
如要查4的话 a就等于dp[3]+1-dp=4 也就是dp【4】这个位置
-
小结:如果数组里没有要找的数,lower_bound,与upper_bound没区别