小编che*_*989的帖子

如何替换字符串中出现的所有字符?

将所有出现的角色替换为另一个角色的有效方法是什么std::string

c++ algorithm stdstring str-replace

450
推荐指数
7
解决办法
46万
查看次数

删除重复项和排序向量的最有效方法是什么?

我需要带有可能包含大量元素的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++ sorting stl vector duplicates

254
推荐指数
13
解决办法
31万
查看次数

packaged_task和async有什么区别

在使用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::asyncstd::launch::deferred,但有一个在这种情况下?

这两种方法有什么区别,更重要的是,我应该使用哪种用例?

c++ multithreading packaged-task c++11 stdasync

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

在C中以整数查找最高设置位(msb)的最快/最有效方法是什么?

如果我有一个整数n,并且我想知道最高位的位置(也就是说,如果最低有效位在右边,我想知道最左边位的位置是1),找出最快捷/最有效的方法是什么?

我知道POSIX支持ffs()strings.h中的一个方法来查找第一个设置位,但似乎没有相应的fls()方法.

是否有一些非常明显的方法可以解决这个问题?

如果你不能使用POSIX功能来实现可移植性呢?

编辑:如何在32位和64位架构上运行的解决方案(许多代码清单似乎只能在32位整数上运行).

c algorithm optimization bit-manipulation

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

111
推荐指数
4
解决办法
10万
查看次数

删除URL开头的字符串

我想www.从URL字符串的开头删除" "部分

例如,在这些测试用例中:

例如www.test.comtest.com
例如www.testwww.comtestwww.com
例如testwww.comtestwww.com(如果不存在)

我需要使用Regexp还是有智能功能?

javascript string

99
推荐指数
6
解决办法
8万
查看次数

最优化的字符串连接方式

我们每天都遇到很多情况,我们必须在代码中执行繁琐且非常多的字符串操作.我们都知道字符串操作是昂贵的操作.我想知道哪些是最便宜的版本.

最常见的操作是连接(这是我们可以在某种程度上控制的).在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?

c++ string concatenation

63
推荐指数
4
解决办法
5万
查看次数

使用std :: stringstream等效%02d?

我想输出一个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)

c++ formatting stringstream

58
推荐指数
4
解决办法
7万
查看次数

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

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

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万
查看次数

这是获得数字绝对值的最快方法

哪个是实现返回数字绝对值的操作的最快方法?

x=root(x²)
Run Code Online (Sandbox Code Playgroud)

要么

if !isPositive(x):
    x=x*(-1)
Run Code Online (Sandbox Code Playgroud)

实际上这个问题可以翻译为,有多快if(为什么请).

我的大学程序教授总是告诉我要避免使用ifs,因为它们非常慢,但我总是忘记问多慢和为什么.这里有人知道吗?

theory algorithm performance absolute-value

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