1、c++计算字符串最后一个字符串长度
很有创意。,输入的数据,我们想计算最后一个,可以直接将字符串反转,计算第一个单词长度。这里 比较节省时间和空间的就是将字符串反转后,直接计算到第一个单词就好。且单词以空格划分,等遍历到第一个空格,就可以查出单词的长度了
#include <iostream>
#include <algorithm>
using namespace std;
int main() {
string a;
getline(cin, a);
int size = a.size( )-1; //去掉'\0' 的占位
int count = 0;
reverse(a.begin(),a.end()); //将字符串反转逆序
while(a[count] != ' ' && count <= size)
{
count++;
}
cout << count << endl;
}
2、多有序链表合并,
比较巧妙的可以使用容器存储链表,使用vector 存储链表的头节点,这样每一个元素都是一个链表的头节点。
再遍历链表使用multiset存储链表的值,因为多链表,可能有重复信息,可使用multiset。
再使用multiset中元素创建新链表。注意,这里struct 结构中使用 new listnode(val); 正好可以创建每个value的新结点。 参考leetcode大佬答案。不过注意空间和时间问题
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode() : val(0), next(nullptr) {}
* ListNode(int x) : val(x), next(nullptr) {}
* ListNode(int x, ListNode *next) : val(x), next(next) {}
* };
*/
class Solution {
public:
ListNode* mergeKLists(vector<ListNode*>& lists) {
multiset<int> list_value;
for(auto &elem : lists){
while(elem ){
list_value.insert(elem->val);
elem = elem->next;
}
}
ListNode * newhead,*ret_head;
newhead = ret_head =new ListNode();
for(auto &newval : list_value){
newhead->next = new ListNode(newval);
newhead = newhead->next;
}
return ret_head->next;
}
};
3、函数指针,将函数当作参数传输进其他函数中
这个应该是有一些方式,不过接触的最常用的一个就是,给pthread_create()函数传输线程入口函数,且,最后一个参数是线程入口函数的参数
int add_two(int x, int y)
{
printf("x +y = %d\n", x+y);
return x+y;
}
void test_func (int (*function)(int ,int ), int args1, int args2)
{
(*function)(args1,args2);
}
int main()
{
test_func(add_two, 1, 2);
return 0;
}
解释:
1、实际上这个东西,没有特别难搞,add_two 是一个正常定义的函数,但是test_func函数需要传入的第一个参数比较特别,简单说,就是需要传入一个符合要求的函数的指针(此函数的参数是俩int;返回值是int,后面传入的俩args可以用来做我们传入的函数的参数,其他类型的参数看自己定义就行;但是这个需要我们人为的调用,就是函数体的部分),
2、写的 *function 是指向函数的指针(所以本质上我们需要传入一个符合这个形参要求的函数的指针就行,类似一个某类型变量的指针做形参,直接传输地址,就会自动找到这个函数)
3、而在main中调用的时候,传入的就是函数名add_two,可以正常运行,改成以下截图中的格式也能正常运行
到这里感觉有点问题了:函数名和函数的指针会不会是一样的东西?
因为我们使用变量时,指针就是变量的地址值,变量的指针解引用后是变量值,类比在函数应该也差不多。但是,这个明显不对镜。
做了以下测试后:
这地址是一毛一样!!!!,也就是这个,完全能直接当个指针用
网上关于这个传参,有的会取地址,有的不会,都没啥问题,反正地址都一样,哪个写着感觉好看用哪个吧。