相关疑难解决方法(0)

为什么使用迭代器而不是数组索引?

请使用以下两行代码:

for (int i = 0; i < some_vector.size(); i++)
{
    //do stuff
}
Run Code Online (Sandbox Code Playgroud)

还有这个:

for (some_iterator = some_vector.begin(); some_iterator != some_vector.end();
    some_iterator++)
{
    //do stuff
}
Run Code Online (Sandbox Code Playgroud)

我被告知第二种方式是首选.这究竟是为什么?

c++ iterator stl

227
推荐指数
13
解决办法
7万
查看次数

什么更快,用vector :: iterator或with()迭代STL向量?

在性能方面,什么会更快?有区别吗?它是平台依赖的吗?

//1. Using vector<string>::iterator:
vector<string> vs = GetVector();

for(vector<string>::iterator it = vs.begin(); it != vs.end(); ++it)
{
   *it = "Am I faster?";
}

//2. Using size_t index:
for(size_t i = 0; i < vs.size(); ++i)
{
   //One option:
   vs.at(i) = "Am I faster?";
   //Another option:
   vs[i] = "Am I faster?";
}
Run Code Online (Sandbox Code Playgroud)

c++ performance iterator stl vector

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

为什么size_t未签名?

Bjarne Stroustrup在C++编程语言中写道:

无符号整数类型非常适合将存储视为位数组的用途.使用无符号而不是int来再获得一位来表示正整数几乎不是一个好主意.通过声明无符号变量来确保某些值为正的尝试通常会被隐式转换规则所取代.

size_t似乎是无符号的"再获得一位代表正整数".那么这是一个错误(或权衡),如果是这样,我们应该在我们自己的代码中最小化它的使用吗?

Scott Meyers的另一篇相关文章就在这里.总而言之,他建议不要使用无符号in接口,无论值是否总是正数.换句话说,即使负值没有意义,也不一定要使用无符号.

c++ size-t unsigned-integer

56
推荐指数
2
解决办法
8485
查看次数

为什么在C++ STL中存在算法,迭代器和容器的分离

我无法弄清楚为什么他们在C++ STL中分离了算法,迭代器和容器.如果在任何地方大量使用模板,那么我们可以使用模板参数将所有内容放在一个地方.

我得到的一些文本解释了迭代器有助于算法与容器数据交互,但是如果容器暴露了一些机制来访问它拥有的数据呢?

c++ algorithm containers iterator stl

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

在C++中n = {0,1,...,n-1}

自然数n的形式定义(在集合论中)如下:

  • 0是空集
  • 1 = {0}
  • n = {0,1,...,n-1}

我认为这会使一些C++代码更简单,如果我被允许这样做:

for (int n : 10)
    cout << n << endl;
Run Code Online (Sandbox Code Playgroud)

它打印的数字从0到9.

所以我尝试执行以下操作,但不编译:

#include <iostream>
#include <boost/iterator/counting_iterator.hpp>


    boost::counting_iterator<int> begin(int t)
    {
        return boost::counting_iterator<int>(0);
    }

    boost::counting_iterator<int> end(int t)
    {
        return boost::counting_iterator<int>(t);
    }



int main() 
{
    for (int t : 10)
        std::cout << t << std::endl;

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

有关如何实现这一目标的任何建议?我用clang ++得到以下错误:

main.cpp:22:20: error: invalid range expression of type 'int'; no viable 'begin' function available
        for (int t : 10)
                ^ ~~
Run Code Online (Sandbox Code Playgroud)

但我想我应该被允许这样做!:)

编辑:我知道如果我在for循环中添加"range"(或其他一些单词)这个词,我可以"伪造"它,但我想知道是否可以不使用它.

c++ set-theory c++14

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