在C++中通常用某种前缀命名成员变量来表示它们是成员变量而不是局部变量或参数.如果你来自MFC背景,你可能会使用m_foo.我myFoo偶尔也见过.
C#(或者可能只是.NET)似乎建议只使用下划线,如_foo.这是否允许C++标准?
在考虑这个问题时,我开始想知道是否std::copy()和/或是std::fill专门的(我真的意味着优化)std::vector<bool>.
这是C++标准所要求的,或者,它是C++ std库供应商的常用方法吗?
简单来说,我想知道以下代码:
std::vector<bool> v(10, false);
std::fill(v.begin(), v.end(), true);
Run Code Online (Sandbox Code Playgroud)
以任何方式更好/不同于:
std::vector<bool> v(10, false);
for (auto it = v.begin(); it != v.end(); ++it) *it = true;
Run Code Online (Sandbox Code Playgroud)
要非常严格 - 可以,可以说:std::fill<std::vector<bool>::iterator>()进入内部表示std::vector<bool>并设置整个字节而不是单个位?我认为交std::fill朋友std::vector<bool>不是图书馆供应商的大问题吗?
[UPDATE]
下一个相关的问题:我可以(或其他任何人)专门研究这样的算法std::vector<bool>,如果不是已经专门化了吗?这是C++标准允许的吗?我知道这将是不可移植的 - 但仅适用于一个选定的std C++库?假设我(或其他任何人)找到了去std::vector<bool>私人部分的方法.
我刚才发现,在Visual Studio C++ 2010 basic_string::append (iter, iter)中,显然是没有通过使用来实现的std::copy.
第一个问题:
现在假设我实现了自己的迭代器类型,并std::copy为我的迭代器类型优化了重载,以便提供更有效的逐块复制.basic_string::append除了超载之外,还有什么办法可以利用这种优化append吗?
有没有机会basic_string::append (iter, iter)不进行字符复制?
第二个问题(作为我自己实施的起点):
以下保证有效吗?
std::string t ("JohnB");
std::string s;
s.reserve (10);
std::copy (t.begin (), t.end (), s.begin ());
s.push_back ('\0');
Run Code Online (Sandbox Code Playgroud)
或者我应该更好地使用back_inserter?如果我使用back_inserter- 我怎么能避免字符复制?