小编Ben*_*enj的帖子

将const std :: string&作为参数传递的日子是多少?

我听取了香草萨特最近的谈话谁建议的理由来传递std::vectorstd::string利用const &在很大程度上消失了.他建议现在更好地编写如下函数:

std::string do_something ( std::string inval )
{
   std::string return_val;
   // ... do stuff ...
   return return_val;
}
Run Code Online (Sandbox Code Playgroud)

我理解return_val在函数返回时将是一个rvalue,因此可以使用非常便宜的移动语义返回.但是,inval仍然远大于引用的大小(通常实现为指针).这是因为a std::string具有各种组件,包括指向堆的指针和char[]用于短字符串优化的成员.所以在我看来,通过引用传递仍然是一个好主意.

谁能解释为什么Herb可能会说这个?

c++ c++11

579
推荐指数
11
解决办法
17万
查看次数

分析Vim启动时间

使用Vim时我已经启用了很多插件 - 多年来我收集了插件.我有点厌倦了Vim现在需要多长时间,所以我想介绍一下它的启动,看看我有哪些插件负责.

有没有办法分析Vim的启动或脚本运行?理想情况下,我想知道Vim在加载的每个Vim脚本中花了多长时间.

debugging vim optimization profiling

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

std :: string和std :: basic_string有什么区别?为什么两者都需要?

std::string和之间有什么区别std::basic_string?为什么两者都需要?

c++ stl

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

有没有将范围移动到矢量的标准方法?

考虑以下程序,它将一系列元素插入到向量中:

vector<string> v1;
vector<string> v2;

v1.push_back("one");
v1.push_back("two");
v1.push_back("three");

v2.push_back("four");
v2.push_back("five");
v2.push_back("six");

v1.insert(v1.end(), v2.begin(), v2.end());
Run Code Online (Sandbox Code Playgroud)

这有效地复制了范围,在整个范围内为目标矢量分配了足够的空间,因此最多需要一个调整大小.现在考虑以下程序尝试将范围移动到向量中:

vector<string> v1;
vector<string> v2;

v1.push_back("one");
v1.push_back("two");
v1.push_back("three");

v2.push_back("four");
v2.push_back("five");
v2.push_back("six");

for_each ( v2.begin(), v2.end(), [&v1]( string & s )
{
    v1.emplace_back(std::move(s));
});
Run Code Online (Sandbox Code Playgroud)

这会执行成功的移动,但不会享受insert()在目标向量中预分配空间方面的优势,因此在操作期间可以多次调整向量的大小.

所以我的问题是,是否有一个插入等效项可以将范围移动到向量中?

c++ insert stdvector c++11

52
推荐指数
2
解决办法
1万
查看次数

mysql中的varchar(100)声明使用了多少实际存储空间?

如果我有一个表格,其中一个字段被声明为接受varchar(100)然后我实际插入单词"hello"将在mysql服务器上使用多少真实存储空间?即使声明了varchar(100),插入NULL也会导致没有使用存储?

答案是什么,它是否与不同的数据库实现一致?

mysql sql

22
推荐指数
2
解决办法
2万
查看次数

打开该类型的文件时是否可以自动设置UTF16文件编码?

我用Vim编辑各种文件(因为我确信大多数Vim用户都这样做).我遇到的一个错误就是Vim在遇到带有奇数编码的文件时所做的事情.大多数编辑(这些天)在检测文件编码方面做得很好.但是,Vim通常不会.你必须键入,例如:

:e ++enc=utf-16le
Run Code Online (Sandbox Code Playgroud)

以UTF-16重新读取文件(否则你会获得大量的@符号)

我一直在搜索并看过set_utf8.vim可以检测特定文件编码的脚本.但是,有更一般的解决方案吗?我有点无聊,必须手动计算文件编码是什么,并在每次打开一个不寻常的文件时咨询帮助.

vim

22
推荐指数
2
解决办法
9495
查看次数

std :: nth_element和std :: sort之间的实际区别是什么?

我一直在看std :: nth_element算法,显然:

重新排列[first,last]范围内的元素,使得生成的第n个位置的元素是在排序序列中处于该位置的元素,其前面的元素都不是更大而且没有跟随它的元素比它小.它前面的元素和后面的元素都不能保证订购.

但是,使用我的编译器,运行以下命令:

    vector<int> myvector;
    srand(GetTickCount());

    // set some values:
    for ( int i = 0; i < 10; i++ )
        myvector.push_back(rand());

    // nth_element around the 4th element
    nth_element (myvector.begin(), myvector.begin()+4, myvector.end());

    // print results
    for (auto it=myvector.begin(); it!=myvector.end(); ++it)
        cout << " " << *it;

    cout << endl;
Run Code Online (Sandbox Code Playgroud)

始终以与std :: sort相同的方式返回完全排序的整数列表.我错过了什么吗?这个算法对什么有用?

编辑:好的以下示例使用更大的集合表明存在很大差异:

    vector<int> myvector;
    srand(GetTickCount());

    // set some values:
    for ( int i = 0; i < RAND_MAX; i++ )
        myvector.push_back(rand());

    // nth_element around the 4th …
Run Code Online (Sandbox Code Playgroud)

c++

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

堆栈和堆上的STL容器

如果std :: vector和朋友自我调整大小,这是否意味着如果我声明一个这样的向量:

std::vector<string> myvec;
Run Code Online (Sandbox Code Playgroud)

然后它将使用更多堆栈调整大小,而:

std::vector<string> *myvec = new std::vector<string>();
Run Code Online (Sandbox Code Playgroud)

会使用更多堆调整大小吗?

c++ memory-management stl

18
推荐指数
2
解决办法
9351
查看次数

如何将非托管IntPtr类型转换为ac#string?

我是C#的新手(来自原生C++背景),我正在尝试编写一个小UI来打印Windows广播消息等.我在我的C#程序中重写了默认的WndProc消息循环,如下所示:

[System.Security.Permissions.PermissionSet(System.Security.Permissions.SecurityAction.Demand, Name = "FullTrust")]
    protected override void WndProc(ref Message m)
    {
        // Listen for operating system broadcasts.
        switch (m.Msg)
        {
            case WM_SETTINGCHANGE:

                this.richTextLog.Text += "WM_SETTINGCHANGE - lParam=" + m.LParam.ToString() + "\n";

                break;
        }
        base.WndProc(ref m);
    }
Run Code Online (Sandbox Code Playgroud)

我想知道的是,如何获取intPatr类型的lParam对象的字符串表示.它本质上是C++领域的一个空白*,我能以某种方式将它转换为C#吗?据推测,这样做本质上是不安全的.

c# unmanaged

18
推荐指数
2
解决办法
3万
查看次数

是否可以在批处理文件中的回显行中添加新的行字符?

是否可以在批处理文件中的回显行中添加新的行字符?

基本上我希望能够做到相当于:

echo Hello\nWorld
Run Code Online (Sandbox Code Playgroud)

您可以在Linux中轻松完成此操作,但我无法解决如何在Windows中执行此操作.

windows batch-file

17
推荐指数
4
解决办法
8万
查看次数