相关疑难解决方法(0)

C++迭代器和循环优化

我看到很多c ++代码看起来像这样:

for( const_iterator it = list.begin(),
     const_iterator ite = list.end();
     it != ite; ++it)
Run Code Online (Sandbox Code Playgroud)

与更简洁的版本相反:

for( const_iterator it = list.begin();
     it != list.end(); ++it)
Run Code Online (Sandbox Code Playgroud)

这两个约定之间的速度会有什么不同吗?由于list.end()只被调用一次,因此第一个会稍快一些.但由于迭代器是const,似乎编译器会将此测试从循环中拉出来,为两者生成等效的汇编.

c++ compiler-construction optimization iterator coding-style

46
推荐指数
6
解决办法
4万
查看次数

如何删除const_iterator的constness?

作为扩展到这个问题const_iterators更快?,我有另一个问题const_iterators.如何删除一个常量const_iterator?虽然迭代器是指针的通用形式,但仍然const_iteratoriterators是两个不同的东西.因此,我相信,我也不能用来const_cast<>转换const_iteratoriterators.

一种方法可能是您定义一个迭代器,该迭代器将元素移动到该const_iterator点的元素.但这看起来像是一个线性时间算法.

对于实现这一目标的最佳方法有什么想法吗?

c++ iterator stl const-iterator

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

通过迭代器和运算符[]/index快速访问std :: vector?

说,我有一个

std::vector<SomeClass *> v;
Run Code Online (Sandbox Code Playgroud)

在我的代码中,我需要经常在程序中访问它的元素,向前和向后循环它们.

这两者之间的访问类型最快?

迭代器访问:

std::vector<SomeClass *> v;
std::vector<SomeClass *>::iterator i;
std::vector<SomeClass *>::reverse_iterator j;

// i loops forward, j loops backward
for( i = v.begin(), j = v.rbegin(); i != v.end() && j != v.rend(); i++, j++ ){
    // some operations on v items
}
Run Code Online (Sandbox Code Playgroud)

下标访问(按索引)

std::vector<SomeClass *> v;
unsigned int i, j, size = v.size();

// i loops forward, j loops backward
for( i = 0, j = size - 1; i < size && j >= …
Run Code Online (Sandbox Code Playgroud)

c++ performance iterator stl vector

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

我应该比const_iterators更喜欢迭代器吗?

最近有人提出 Scott Meyers的文章说:

  • 身高iterators超过const_iterators(PDF链接).

其他人评论说这篇文章可能已经过时了.我想知道你的意见是什么?

这是我的:文章的一个要点是你不能删除或插入const_iterator,但我认为用它作为反对的论据很有趣const_iterators.我认为它的全部意义const_iterators在于你根本不修改范围,也不是通过插入或删除来替换它们的值或范围.或者我错过了什么?

c++ iterator stl const-iterator

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

如果指针已标记为const,是否限制C中的帮助?

只是想知道:当我向指针添加restrict时,我告诉编译器指针不是另一个指针的别名.我们假设我有一个类似的函数:

// Constructed example
void foo (float* result, const float* a, const float* b, const size_t size)
{
     for (size_t i = 0; i < size; ++i)
     {
         result [i] = a [0] * b [i];
     }
}
Run Code Online (Sandbox Code Playgroud)

如果编译器必须假设result可能重叠a,则必须每次重新获取.但是,正如a标记的那样const,编译器也可以假设a是固定的,因此一次取回它就可以了.

问题是,在这种情况下,使用restrict的推荐方法是什么?我当然不希望编译器a每次都重新获取,但我找不到关于如何restrict在这里工作的好信息.

c c++ optimization restrict-qualifier

22
推荐指数
4
解决办法
5457
查看次数

如何使用const_iterator来编译更高效的程序?

据我所知,使用const&所有其他花哨的C++东西,正如我在视频中所说的"帮助编译器"时所说的Bjarne Stroustrup.我理解如何&尽可能使用(引用)可以帮助提高程序的效率,但有一件事我不明白是多么const_iterator有用.假设我使用

#include <string>
#include <iostream>

int main()
{
    const std::string s = "Vote for Pat Buchanan in 2016";
    for (std::string::const_iterator i1(s.cbegin()), i2(s.cend()); i1 != i2; ++i1) 
        std::cout << *i1 << std::endl;

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

代替

#include <string>
#include <iostream>

int main()
{
    const std::string s = "Vote for Pat Buchanan in 2016";
    for (std::string::iterator i1(s.begin()), i2(s.end()); i1 != i2; ++i1) 
        std::cout << *i1 << std::endl;

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

两者都有效.前者如何更有效率?如何通过使用const_iteratorgo来迭代字符串比使用常规字符串迭代更快 …

c++

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