小编chr*_*ris的帖子

你最喜欢的STL技巧是什么?

我已经用C++编程了很长一段时间了,但我偶尔偶然发现一个使用STL的代码片段,这会花费我很多时间和更多的代码来完成.

STL需要相当长的一段时间才能习惯,并且没有很多资源可以提供有关如何使用它的真实示例.请与我分享您最喜爱的STL功能!

c++ stl

11
推荐指数
4
解决办法
2611
查看次数

如何使用boost :: iostreams将bash脚本转换为C++

我正在尝试使用boost :: iostreams将以下bash代码转换为C++:

#!/usr/bin/bash
(
    gzip -cd file1.ext.gz
    cat file2.ext
) | grep '^regex' # or sed 's/search/replace/'
Run Code Online (Sandbox Code Playgroud)

我可以打开一个文件并解压缩它:

std::ifstream s("file.ext.gz", std::ios_base::in | std::ios_base::binary);
boost::iostreams::filtering_istreambuf in;
in.push(boost::iostreams::gzip_decompressor());
in.push(s);
Run Code Online (Sandbox Code Playgroud)

然后打开一个未压缩的文件:

std::ifstream s2("file.ext", std::ios_base::in | std::ios_base::binary);
Run Code Online (Sandbox Code Playgroud)

现在我有点卡住了,所以这是我的问题:

1)什么是boost :: iostreams解决方案来连接两个流?

2)如何通过正则表达式过滤器输出结果来模拟grep/sed?

因此,我想要一个可以复制到cout的istream:

boost::iostream::copy(result, std::cout);
Run Code Online (Sandbox Code Playgroud)

使用Hamigaki的连接更新完整解决方案:

/*
 * convert the following bash script into C++
 *
 * #!/bin/bash
 * (
 *     gzip -cd file1.ext.gz
 *     cat file2.ext
 * ) | grep '^filter' | 'sed s/search/replace/g'
 *
 */

#include <iostream>
#include …
Run Code Online (Sandbox Code Playgroud)

c++ bash boost boost-iostreams boost-regex

9
推荐指数
1
解决办法
2702
查看次数

为什么以下会产生分段错误?

int main()
{
        char *temp = "Paras";

        int i;
        i=0;

        temp[3]='F';

        for (i =0 ; i < 5 ; i++ )
                printf("%c\n", temp[i]);

        return 0;
}
Run Code Online (Sandbox Code Playgroud)

为什么 temp[3]='F';会造成分割的错,因为temp是不const

c const segmentation-fault

8
推荐指数
1
解决办法
167
查看次数

将sql值连接到变量

在SQL Server 2008上,我试图将所有选定值的逗号分隔列表添加到变量中.

SELECT field
FROM table
Run Code Online (Sandbox Code Playgroud)

收益:

+-------+
| field |
+-------+
| foo   |
+-------+
| bar   |
+-------+
Run Code Online (Sandbox Code Playgroud)

我想得到:"foo,bar,"

我试过了:

DECLARE @foo NVARCHAR(MAX)
SET @foo = ''

SELECT @foo = @foo + field + ','
FROM TABLE

PRINT @foo
Run Code Online (Sandbox Code Playgroud)

什么都不返回.我究竟做错了什么?

sql sql-server sql-server-2008

7
推荐指数
1
解决办法
3万
查看次数

实现C++ postfix增量运算符

我编译了以下示例:

#include <iostream>
#include <iterator>
using namespace std;

class myiterator : public iterator<input_iterator_tag, int>
{
  int* p;
public:
  myiterator(int* x) :p(x) {}
  myiterator(const myiterator& mit) : p(mit.p) {}
  myiterator& operator++() {++p;return *this;}
  myiterator& operator++(int) {myiterator tmp(*this); operator++(); return tmp;}
  bool operator==(const myiterator& rhs) {return p==rhs.p;}
  bool operator!=(const myiterator& rhs) {return p!=rhs.p;}
  int& operator*() {return *p;}
};

int main () {
  int numbers[]={10,20,30,40,50};
  myiterator beginning(numbers);
  myiterator end(numbers+5);
  for (myiterator it=beginning; it!=end; it++)
      cout << *it << " ";
  cout << endl; …
Run Code Online (Sandbox Code Playgroud)

c++ operator-overloading post-increment postfix-operator

5
推荐指数
1
解决办法
3725
查看次数

如何在菜单项上捕获gtk scroll-event

Gtk小部件发出信号滚动事件.我想在MenuItem上将函数连接到该信号.以下示例代码不起作用.

$ cat scroll-event-on-menu-item.c 
#include <gtk/gtk.h>

void scroll_cb(GtkStatusIcon* icon, GdkEvent* ev, gpointer userdata)
{
    g_message("scrolled!");
}

void quit_cb(GtkMenuItem* item, GdkEventButton* ev, gpointer userdata)
{
    gtk_main_quit();
}

void click_cb(GtkStatusIcon* icon, GdkEventButton* ev, gpointer userdata)
{
    GtkWidget* menu = gtk_menu_new();
    GtkWidget* item = gtk_image_menu_item_new_from_stock(GTK_STOCK_QUIT, NULL);
    gtk_menu_shell_append(GTK_MENU_SHELL(menu), item);
    gtk_widget_show(menu);
    gtk_widget_show(item);
    g_signal_connect(item, "button-press-event", G_CALLBACK(quit_cb), NULL);
    g_signal_connect(item, "scroll-event", G_CALLBACK(scroll_cb), NULL);
    gtk_menu_popup(GTK_MENU(menu), NULL, NULL, gtk_status_icon_position_menu,
            icon, ev->button, ev->time);
}

int main(int argc, char *argv[])
{
    gtk_init(&argc, &argv);

    GtkStatusIcon* icon = gtk_status_icon_new_from_stock(GTK_STOCK_INFO);
    g_signal_connect(icon, "button-press-event", G_CALLBACK(click_cb), …
Run Code Online (Sandbox Code Playgroud)

c gtk glib gdk gtk3

3
推荐指数
1
解决办法
2056
查看次数