代码片段笔记-提高编程效率

classic code

代码调试的临时代码管控

.h
typedef enum
{
  release_state = 0,
  debug_state,//调试阶段和非调试阶段的分界线
  real_team_debug = debug_state,
  real_team_debug_single_gps_device,
  simulate_nodes_debug,
  coding_debug,//解决基本代码是否有问题,是否能够联通gps设备,是否有数据上来的级别的bug
  max_state = coding_debug,
}Debug_state;//调试节奏是从下往上

int CODE_STATE  = simulate_nodes_debug;

.cpp
if (CODE_STATE >= simulate_nodes_debug)
    cout << "in :" << endl;

std

iterator的使用

std::vector<track_data> track_datas_t;

for (vector<track_data>::iterator it = track_datas_t.begin(); it != track_datas_t.end(); ++it)
      { 
        cout << "it is:" << endl;
        gps_data_ht_.odom.pose.pose.position.x = it->x;
        gps_data_ht_.odom.pose.pose.position.y = it->y;

        exhibition_odom_publisher_.publish(gps_data_ht_);
      }

include boost

#include <boost/tokenizer.hpp>
#include <boost/thread/thread.hpp>

catkin_package(
      INCLUDE_DIRS include
      LIBRARIES novatel
      CATKIN_DEPENDS serial roslib roscpp rosconsole tf gps_msgs nav_msgs sensor_msgs
      DEPENDS Boost
    )

find_package(Boost REQUIRED COMPONENTS system filesystem thread)

find_package(Boost REQUIRED COMPONENTS
        thread
      )


thread&boost

boost::thread

.cpp
read_thread_ptr_ = boost::shared_ptr<boost::thread>(new boost::thread(boost::bind(&Novatel::send_rest_locate_data_frq_func, this)));
.h
boost::shared_ptr<boost::thread> read_thread_ptr_;
void send_rest_locate_data_frq_func();

pthread

pthread_create

.cpp
if (!tid)
pthread_create(&tid, NULL, CAN_rcv_handler, this);
void *Driver_CAN::CAN_rcv_handler(void *arg)
{}
.h
static void *CAN_rcv_handler(void *arg);//in .h

condition&boost

.cpp
ack_condition_.notify_all();
            
boost::mutex::scoped_lock lock(ack_mutex_);
boost::system_time const timeout = boost::get_system_time() + boost::posix_time::milliseconds(2000);
if (ack_condition_.timed_wait(lock, timeout))
.h
boost::condition_variable ack_condition_;

time

//获取当地时间
time_t current_time;
time(&current_time);
local_time = localtime(&current_time);
//获取微妙数据
struct timeval tv;
struct timezone tz;
gettimeofday(&tv, &tz);
std::cout << "["
    << local_time->tm_year + 1900 << "-"
    << local_time->tm_mon + 1 << "-"
    << local_time->tm_mday << " "
    << local_time->tm_hour << ":"
    << local_time->tm_min << ":"
    << local_time->tm_sec << "."
    << tv.tv_usec << "]"
    << ", "
    << " [x]:" << gps_data_ht_.odom.pose.pose.position.x - Novatel::x_zero << ","
    << " [y]:" << gps_data_ht_.odom.pose.pose.position.y - Novatel::y_zero << ","
    << " [z]:" << gps_data_ht_.odom.pose.pose.position.z
    << " [heading]:" << gps_data_ht_.heading
    << " [velocity]:" << gps_data_ht_.velocity
    << " [x_zero]:" << Novatel::x_zero << ","
    << " [y_zero]:" << Novatel::y_zero << ","
    << std::endl;

分割字符串到vector中
1、自定义函数

// stolen from: http://oopweb.com/CPP/Documents/CPPHOWTO/Volume/C++Programming-HOWTO-7.html
void Tokenize(const std::string &str, std::vector<std::string> &tokens, const std::string &delimiters = " ")
{
    // Skip delimiters at beginning.
    std::string::size_type lastPos = str.find_first_not_of(delimiters, 0);
    // Find first "non-delimiter".
    std::string::size_type pos = str.find_first_of(delimiters, lastPos);

    while (std::string::npos != pos || std::string::npos != lastPos)
    {
        // Found a token, add it to the vector.
        tokens.push_back(str.substr(lastPos, pos - lastPos));
        // Skip delimiters.  Note the "not_of"
        lastPos = str.find_first_not_of(delimiters, pos);
        // Find next "non-delimiter"
        pos = str.find_first_of(delimiters, lastPos);
    }
}

std::string log_string
std::vector<std::string> logs;
//在log_string中以 分号作为分隔符 搜索所有的内容
//将内容放入vector logs中
Tokenize(log_string, logs, ";");

2、boost的自带的方法

typedef boost::tokenizer<boost::char_separator<char>> tokenizer;
    boost::char_separator<char> sep(" ");

    while(getline(track_file,line))//会自动把\n换行符去掉 
    {
      tokenizer tokens(line, sep);
      tokenizer::iterator current_token = tokens.begin();
      track_data_temp.num = atof((*(current_token++)).c_str());
      track_data_temp.x = atof((*(current_token++)).c_str());
      track_data_temp.y = atof((*(current_token)).c_str());
      cout << "num is:" << track_data_temp.num << endl;
      cout << "lati is:" << track_data_temp.x << endl;
      cout << "longi is:" << track_data_temp.y << endl;
      track_datas_t.push_back(track_data_temp);
      cout << "track_datas_t size is:" << track_datas_t.size() << endl;
    }

stream

file stream

get file into buff

std::string track_file_path_ = "/home/yuhs/track.txt";
std::ifstream track_file(track_file_path_.c_str(), std::ios::binary);

if (!track_file.is_open())
{
std::cout << "track File " << track_file_path_ << " did not open." << std::endl;
}

//获取文件大小
track_file.seekg(0, track_file.end);
size_t size = track_file.tellg();

//Put data into buffer
unsigned char buff[size];

//重新将读取指针定位到begin
track_file.seekg(0, track_file.beg);
track_file.read((char *)buff, size);

// Finished with the file, close it
track_file.close();


//获取到文件的每一行
vector<string>  strings;
  string  line;
  while(getline(track_file,line))//会自动把\n换行符去掉 
  {
      strings.push_back(line);
  }
  cout << "string nums is:" << strings.size() << endl;

string

转换

string和各种数据的相互转换

string a = "1234";
int b = atoi(a.c_str());

ros

set

set(hahaha  "hahahah")

topic

ros::Publisher exhibition_odom_publisher_;

this->exhibition_odom_publisher_ = nh_.advertise<gps_msgs::Gps_Data_Ht>(exhibition_odom_topic_, 0);
ros::Subscriber cmd_sub = n.subscribe("/cmd_vel", 1000, cmd_callback);

void cmd_callback(const geometry_msgs::Twist &vel)
{

    if (cmd_manual == 0)
    {
        cout << "cmd_vel rcved\n"
             << endl;
        linear_v = vel.linear.x;
        angular_w = vel.angular.z;
    }
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,245评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,749评论 3 391
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,960评论 0 350
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,575评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,668评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,670评论 1 294
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,664评论 3 415
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,422评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,864评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,178评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,340评论 1 344
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,015评论 5 340
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,646评论 3 323
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,265评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,494评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,261评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,206评论 2 352

推荐阅读更多精彩内容