将所有出现的角色替换为另一个角色的有效方法是什么std::string
?
我需要带有可能包含大量元素的C++向量,擦除重复项并对其进行排序.
我目前有以下代码,但它不起作用.
vec.erase(
std::unique(vec.begin(), vec.end()),
vec.end());
std::sort(vec.begin(), vec.end());
Run Code Online (Sandbox Code Playgroud)
我怎样才能正确地做到这一点?
此外,首先擦除重复项(类似于上面编码)或首先执行排序是否更快?如果我首先执行排序,是否保证在std::unique
执行后保持排序?
或者还有另一种(也许是更有效的)方法来做这一切吗?
在使用C++ 11的线程模型时,我注意到了这一点
std::packaged_task<int(int,int)> task([](int a, int b) { return a + b; });
auto f = task.get_future();
task(2,3);
std::cout << f.get() << '\n';
Run Code Online (Sandbox Code Playgroud)
和
auto f = std::async(std::launch::async,
[](int a, int b) { return a + b; }, 2, 3);
std::cout << f.get() << '\n';
Run Code Online (Sandbox Code Playgroud)
似乎做了完全相同的事情.据我所知,有可能是一个重大的区别,如果我跑std::async
带std::launch::deferred
,但有一个在这种情况下?
这两种方法有什么区别,更重要的是,我应该使用哪种用例?
如果我有一个整数n,并且我想知道最高位的位置(也就是说,如果最低有效位在右边,我想知道最左边位的位置是1),找出最快捷/最有效的方法是什么?
我知道POSIX支持ffs()
strings.h中的一个方法来查找第一个设置位,但似乎没有相应的fls()
方法.
是否有一些非常明显的方法可以解决这个问题?
如果你不能使用POSIX功能来实现可移植性呢?
编辑:如何在32位和64位架构上运行的解决方案(许多代码清单似乎只能在32位整数上运行).
我可以假设(bool)true == (int)1
任何C++编译器吗?
我想www.
从URL字符串的开头删除" "部分
例如,在这些测试用例中:
例如www.test.com
→ test.com
例如www.testwww.com
→ testwww.com
例如testwww.com
→ testwww.com
(如果不存在)
我需要使用Regexp还是有智能功能?
我们每天都遇到很多情况,我们必须在代码中执行繁琐且非常多的字符串操作.我们都知道字符串操作是昂贵的操作.我想知道哪些是最便宜的版本.
最常见的操作是连接(这是我们可以在某种程度上控制的).在C++中连接std :: strings的最佳方法是什么,以及加速连接的各种解决方法?
我的意思是,
std::string l_czTempStr;
1).l_czTempStr = "Test data1" + "Test data2" + "Test data3";
2). l_czTempStr = "Test data1";
l_czTempStr += "Test data2";
l_czTempStr += "Test data3";
3). using << operator
4). using append()
Run Code Online (Sandbox Code Playgroud)
另外,我们是否可以使用CString而不是std :: string?
我想输出一个std::stringstream
等价格为printf
's 的整数%02d
.是否有更简单的方法来实现这一点:
std::stringstream stream;
stream.setfill('0');
stream.setw(2);
stream << value;
Run Code Online (Sandbox Code Playgroud)
是否有可能将某种格式标志流式传输给stringstream
类似(伪代码)的东西:
stream << flags("%02d") << value;
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");
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()在目标向量中预分配空间方面的优势,因此在操作期间可以多次调整向量的大小.
所以我的问题是,是否有一个插入等效项可以将范围移动到向量中?
哪个是实现返回数字绝对值的操作的最快方法?
x=root(x²)
Run Code Online (Sandbox Code Playgroud)
要么
if !isPositive(x):
x=x*(-1)
Run Code Online (Sandbox Code Playgroud)
实际上这个问题可以翻译为,有多快if
(为什么请).
我的大学程序教授总是告诉我要避免使用if
s,因为它们非常慢,但我总是忘记问多慢和为什么.这里有人知道吗?
c++ ×7
algorithm ×3
c++11 ×2
string ×2
boolean ×1
c ×1
casting ×1
duplicates ×1
formatting ×1
insert ×1
javascript ×1
optimization ×1
performance ×1
sorting ×1
stdasync ×1
stdstring ×1
stdvector ×1
stl ×1
str-replace ×1
stringstream ×1
theory ×1
vector ×1