1、判断是否为字符、数字
int isalpha ( int c ); 是否为字符
int isdigit ( int c ); 是否为数字
int isalnum ( int c ); 是否为字符或者数字
2、字符转数字、数字转字符
int stoi (const string& str, size_t* idx = 0, int base = 10);
string to_string (int val);
3、将容器内元素反转
#include <algorithm> // std::reverse
std::vector myvector;
for(int i=1; i<10; ++i) myvector.push_back(i); // 1 2 3 4 5 6 7 8 9
std::reverse(myvector.begin(), myvector.end()); // 9 8 7 6 5 4 3 2 1
4、信号量(Posix)
#include <semaphore.h>
int sem_init(sem_t *sem, int pshared, unsigned int value);
int sem_wait(sem_t *sem);
int sem_trywait(sem_t *sem);
int sem_timedwait(sem_t *sem, const struct timespec *abs_timeout);
int sem_post(sem_t *sem);
Link with -pthread.
5、互斥锁(Posix)
#include <pthread.h>
pthread_mutex_t mutex= PTHREAD_MUTEX_INITIALIZER;
int pthread_mutex_init(pthread_mutex_t *mutex, const pthread_mutexattr_t *attr);
int pthread_mutex_destroy(pthread_mutex_t *mutex);
int pthread_mutex_lock(pthread_mutex_t *mutex);
int pthread_mutex_trylock(pthread_mutex_t *mutex);
int pthread_mutex_unlock(pthread_mutex_t *mutex);
PS:多线程的同步与互斥(互斥锁、条件变量、读写锁、自旋锁、信号量)
6、class mutex 互斥锁 (C++11)
class mutex;
void lock(); // Member functions
void unlock();
bool try_lock();
std::lock_guard 自动释放锁
在构造函数中进行加锁,析构函数中进行解锁。
注意:作用域结束自动析构并解锁,不能中途解锁,必须等作用域结束才解锁。
std::unique_lock 自动释放锁
unique_lock允许延迟锁定、锁定的有时限尝试、递归锁定、所有权转移和与条件变量一同使用。
unique_lock具有 lock_guard 的所有功能,同时又具有其他方法,更强灵活方便,其特点如下:
->创建时可以不锁定(通过指定第二个参数为std::defer_lock),而在需要时再锁定
->可以随时加锁解锁
->作用域规则同 lock_grard,析构时自动释放锁
->不可复制,可移动
->条件变量需要该类型的锁作为参数(此时必须使用unique_lock)
example链接
https://www.jianshu.com/p/bc2bbda63735
PS:c++11中有 mutex (互斥量),有 condition_variable (条件变量),并没有 semaphore (信号量)
7、
网友评论