每日面试题
1. const关键字的作用?
const用于定义常量。可与指针进行搭配使用,用于定于指针本身或指针指向的内容是常量。
①定义常量
int main()
{
const int a = 10;
a = 20;
cout << a;
}
//会报错error: assignment of read-only variable 'a',因为a为常量不可被修改
②定义指针本身是常量
const int *ptr = &some_variable;
// *ptr = 5; // 这行代码是错误的,因为 *ptr 是常量
③定义指针指向的内容为常量
int value = 10;
int *const ptr = &value;
// ptr = &another_variable; // 这行代码是错误的,因为 ptr 是常量
*ptr = 20; // 这是正确的,因为 ptr 指向的内容不是常量
④可以定义不可修改的函数参数
void someFunction(const int param) {
// 这里不能修改 param 的值
}
2. volatile关键字的作用
volatile关键字的作用是告诉编译器不要对某个变量的访问进行优化,具体作用有以下几点:
①确保每次都从内存中读取变量的值: 通常来说,变量的值会被缓存在寄存器中以提高访问速度,但对于使用volatile来修饰的变量来说,会直接读取内存中的值,而不是读取缓存中的旧值,这样做可以使得程序能够获取到变量的最新值。
②阻止编译器的优化: 通常来说编译器会进行各种优化以提高代码的执行效率,但有时这些优化会忽略变量的实际变化。使用volatile修饰可以确保每次对于变量的访问都是基于实际的内存读取和写入操作。
③适用于多线程和并发环境: 在多线程或并发编程环境中,多个线程可能同时访问和修改同一个变量的值。使用volatile关键字可以确保每个线程都能看到该变量最新的值,从而避免数据不一致的问题。
每日算法 判定是否为字符重排
给出两个字符串s1和s2,判断其中一个字符串重新排列后是否可以变成另外一个字符串。
我的思路就是,如果两个字符串的长度都不同,不可能重排,直接返回false。之后对字符串内的元素直接sort排序,然后比对各元素是否相同即可。
class Solution {
public:
bool CheckPermutation(string s1, string s2) {
if(s1.size() != s2.size()) return false;
sort(s1.begin(),s1.end());
sort(s2.begin(),s2.end());
for(int i=0;i<s1.size();i++){
if(s1[i] != s2[i]) return false;
}
return true;
}
};