小编CAd*_*ker的帖子

从输入迭代器创建C++ std :: string的性能

我正在做一些非常简单的事情:将整个文本文件从磁盘中抹去std::string.我目前的代码基本上是这样的:

std::ifstream f(filename);
return std::string(std::istreambuf_iterator<char>(f), std::istreambuf_iterator<char>());
Run Code Online (Sandbox Code Playgroud)

它不太可能对程序产生任何性能影响,但我仍然很好奇这是否是一种缓慢的方式.

是否存在构造字符串将涉及大量重新分配的风险?在读取之前使用seekg()/ tellg()计算文件大小和reserve()字符串中的那么多空间会更好(也就是说更快)吗?

c++ string stream

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

std :: string的语言环境相关排序

我试图以std::string依赖于语言环境的方式比较s.

对于普通的C风格的字符串,我发现strcoll,这完全符合我的要求std::setlocale

#include <iostream>
#include <locale>
#include <cstring>

bool cmp(const char* a, const char* b)
{
    return strcoll(a, b) < 0;
}

int main()
{
    const char* s1 = "z", *s2 = "å", *s3 = "ä", *s4 = "ö";

    std::cout << (cmp(s1,s2) && cmp(s2,s3) && cmp(s3,s4)) << "\n"; //Outputs 0
    std::setlocale(LC_ALL, "sv_SE.UTF-8");
    std::cout << (cmp(s1,s2) && cmp(s2,s3) && cmp(s3,s4)) << "\n"; //Outputs 1, like it should

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

但是,我也希望有这种行为std::string.我可以过载operator<来做类似的事情

bool …
Run Code Online (Sandbox Code Playgroud)

c++ string locale

9
推荐指数
2
解决办法
3256
查看次数

字符串的Python文件接口

是否有一个Python类file围绕字符串包装接口(读,写等)?我的意思是像stringstreamC++中的类.

我正在考虑使用它将输出重定向print到一个字符串,就像这样

sys.stdout = string_wrapper()
print "foo", "bar", "baz"
s = sys.stdout.to_string() #now s == "foo bar baz"
Run Code Online (Sandbox Code Playgroud)

编辑:这是一个副本如何在Python中的文件中包装一个字符串?

python string file

4
推荐指数
1
解决办法
1140
查看次数

具有非参数模板类型的类构造函数

对于普通的C++函数,可以在参数列表中显示模板参数:

template<typename T>
T default_construct()
{
    return T();
}
Run Code Online (Sandbox Code Playgroud)

并称之为

some_type x = default_construct<some_type>();
Run Code Online (Sandbox Code Playgroud)

即使我使用的类型不在参数列表中,我仍然可以将它传递给函数.现在,我想在类构造函数中执行此操作:

struct Base;

template<typename T>
Base* allocate()
{
    return new T; //Assume T derives from Base...
}

struct factory {
    template<typename T>
    factory()
        : func(allocate<T>)
    {}

    std::tr1::function<Base*()> func;
};
Run Code Online (Sandbox Code Playgroud)

但是当我想构造一个实例时,我找不到一种方法来为构造函数提供参数factory.

有没有办法在将类转换为模板化类或将一些未使用的T对象发送到构造函数的情况下执行此操作?

c++ templates

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

标签 统计

c++ ×3

string ×3

file ×1

locale ×1

python ×1

stream ×1

templates ×1