小编use*_*484的帖子

仿函数实际上比函数指针更快吗?

根据Scott Meyers的说法,C++在C上闪耀的一个领域是函数对象比函数指针更快.他说这是因为函数对象是内联的,这会提高速度.

我有两个问题:

  1. 我们如何验证函数对象实际上是内联的?我们能否在实践中验证这一点?

  2. 函数对象的内联是否依赖于我们使用的编译器,还是所有编译器的行为都是这样的?

c++ function-pointers inlining function-object

58
推荐指数
2
解决办法
4478
查看次数

如何编写自己的操纵器?

让我们假设我想编写自己的输入和输出操纵器.

cin >> mymanip >> str;
Run Code Online (Sandbox Code Playgroud)

要么

cout << mymanip << str;
Run Code Online (Sandbox Code Playgroud)

我希望mymanip做的是切换我从输入中读取的字符并将结果分配给一个字符串.

所以,如果我输入"QwErTy",我会在字符串中输入"qWeRtY".

这是一个非常基本的任务,只有一个功能,但我想了解更多关于操纵器的知识.

有人能给出一个线索吗?

谢谢.

c++ manipulators

4
推荐指数
2
解决办法
1001
查看次数

如何用std :: function和std :: ref替换std :: ptr_fun

我正在尝试学习C++ 11的新功能,我有这个代码:

void print(int t, string separator)
{
    cout << t << separator;
}


int elements[] = { 10, 20, 30, 40, 50, 60, 40 };
string delim = " - ";

for_each(elements, elements + 7, bind2nd(ptr_fun(print), delim));
Run Code Online (Sandbox Code Playgroud)

输出:

10 - 20 - 30 - 40 - 50 - 60 - 40 -
Run Code Online (Sandbox Code Playgroud)

关于ptr_fun,这个网站说:

从C++ 11开始,不推荐使用此函数和相关类型,而使用更通用的std :: functionstd :: ref,这两者都从普通函数创建可调用的适配器兼容函数对象.

有人可以在没有ptr_fun和C++ 11推荐的函数的情况下重写上面的例子吗?

谢谢

c++ c++11 std-function

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

为什么std :: uppercase不能用于字符串?

我一直在使用操纵器一段时间而没有完全理解它们是如何工作的.

这段代码:

std::cout << std::hex << std::showbase;
std::cout << std::uppercase << 77 << '\n';
std::cout << std::nouppercase << 77 << '\n';
Run Code Online (Sandbox Code Playgroud)

或者这个:

std::cout << std::hex;
std::cout << std::setiosflags(std::ios::showbase | std::ios::uppercase) << 77 << '\n';
std::cout << std::nouppercase << 77 << '\n';
Run Code Online (Sandbox Code Playgroud)

两者输出:

0X4D // 'X' and 'D' uppercase
0x4d // 'x' and 'd' lowercase
Run Code Online (Sandbox Code Playgroud)

但是,以下任何代码行都不能将字符串"abcd"转换为大写.为什么?

std::cout << std::uppercase << "abcd" << '\n';
std::cout << std::setiosflags(std::ios::uppercase) << "abcd" << '\n';
Run Code Online (Sandbox Code Playgroud)

另一个问题是为什么showbase并且uppercase必须在std::ios::内部合格std::setiosflags()并且只能在std::外部那个功能? …

c++ manipulators

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

迭代器是静态指针吗?

迭代器的一个简单用法是这样的:

vector<int> v;
vector<int>::iterator iter;

v.push_back(1);
v.push_back(2);
v.push_back(3);

for (iter = v.begin(); iter != v.end(); iter++)
  cout << (*iter) << endl;
Run Code Online (Sandbox Code Playgroud)

我有两个问题:

1)每当我们看到声明时,class-name::member-name它就是该类的静态成员.
那么,既然迭代器被声明为container<type>::iterator,我们可以认为它们是容器的静态成员吗​​?

2)由于迭代器使用相同的sintax指针解引用cout << (*iter) << endl;,我们可以认为它们也是指针吗?

谢谢

c++ iterator

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