网站建设与推广公司,镇江关键词优化如何,有免费推广平台,电子商务网站的建设和维护论文文章目录和--vector二维vector的初始化数组中最大的数max_element()数组所有元素之和accumulate()vector数组去重对pair类型的vector排序对元素都为正整数的vector利用sort默认的升序排列进行降序排列一维数组转二维数组size_t和int如何不用临时变量交换两个数?将类函数的形参…
文章目录和--vector二维vector的初始化数组中最大的数max_element()数组所有元素之和accumulate()vector数组去重对pair类型的vector排序对元素都为正整数的vector利用sort默认的升序排列进行降序排列一维数组转二维数组size_t和int如何不用临时变量交换两个数?将类函数的形参赋值给同名的类成员变量和–
以本题为例形如 left cols 和 left cols 两者的结果是有区别的前者不成立、后者成立。自增自减运算符的优先级很低。。。 vector
二维vector的初始化
可以利用另一个二维数组的大小来初始化目标二维vector
vectorvectorint vc1 { {1,1} ,{1,1},{1,1} };
int rows vc1.size();
int cols vc1[0].size();
vectorvectorint vc2(rows, vectorint(cols, 0));和一有区别的是可以直接通过拷贝构造函数用另一个二维数组直接初始化目标二维vector
vectorvectorint vc1 { {1,1} ,{1,1},{1,1} };
vectorvectorint vc2 vc1;数组中最大的数max_element()
max_element() 属于头文件 algorithm 格式 ForwardIterator max_element (ForwardIterator first, ForwardIterator last); 接受同一数组的两个迭代器参数构成一个迭代器范返回迭代器范中最大元素的迭代器。 数组所有元素之和accumulate()
accumulate() 隶属头文件 numeric 格式 T accumulate (InputIterator first, InputIterator last, T init); 接受同一数组的两个迭代器作为参数以及一个累加和初始值 init 返回迭代器范和初始值的累加和。 vector数组去重
unique 去重的前提是数组有序unique 会将所有重复元素放到数组尾部并返回不重复内容的尾后迭代器换言之也就是第一个重复元素的迭代器那么就可以调用 erase 从第一个重复元素的迭代器开始删除直至 vector 的 尾后迭代器。
#include algorithm
sort(ivec.begin(), ivec.end());
ivec.erase(unique(ivec.begin(), ivec.end()), ivec.end());对pair类型的vector排序
vectorpairint, int vii;
sort(vii.begin(), vii.end());形如上面的代码sort 排序方式是根据 pair 中 first 的值升序排列默认。 对元素都为正整数的vector利用sort默认的升序排列进行降序排列
其实对比使用模板的降序 sort 并没有效率上的提升只是思维上的开拓。
原理就是把元素都变为相反数—— v[i] 变为 -v[i] 之后调用 sort(v.begin(), v.end()) 。
但使用的时候反而有些鸡肋需要将 -v[i] 再变为 v[i] 。因此其适用于特殊情况如 lc506. 相对名次。
vectorpairint, int vii;
for(int i0; in; i){vii.push_back(make_pair(-score[i], i));
}
sort(vii.begin(), vii.end());一维数组转二维数组
主要是通过 emplace_back 直接构造一维数组加入到二维数组中。
// 将一维数组 original 转为 m 行 n 列的二维数组
vectorvectorint construct2DArray(vectorint original, int m, int n) {int sizes original.size();vectorvectorint v;if(sizes ! m*n) return v;for(auto begoriginal.begin(); beg!original.end(); beg n){v.emplace_back(beg, begn);}return v;
}size_t和int
for(int i popped.size() - 1; i 0; i--){s_out.push(popped[i]);
}for(size_t i popped.size() - 1; i 0; i--){s_out.push(popped[i]);
}一直以为 int 和 size_t 没有什么大区别结果如上所示第二种写法是错误的因为 size_t 必须保存 大于等于 0 的数而 -- 操作会使 i 最终的值 小于0 因此运行时会出现错误。 如何不用临时变量交换两个数?
int a 1;
int b 2;
/*方法1*/
a a b; //新a原a原b
b a - b; //新b新a-b原a原b-原b原a
a a - b; //新新a新a-新b原a原b-新b原a原b-原a原b/*方法2 ^ 按位异或 异曲同工*/
a a ^ b;
b a ^ b;
a a ^ b;将类函数的形参赋值给同名的类成员变量
有这样的代码
class Solution{int a;
public:void fun(int a){}
};如果在fun函数内我想将调用时 实参a 传给 形参a 的值赋给 类的成员变量a该怎么办呢
这就牵扯到了以前提到过的this指针的知识以前讲过this指针指向调用当前函数的对象而 调用fun函数的对象 也就是 Solution的对象 。而我们想要进行的操作也是将 形参a的值 赋给 调用当前函数的对象其成员a 因此可以这样实现
void fun(int a){this-a a;
}