相关疑难解决方法(0)

为什么在C++ 11中使用非成员开始和结束函数?

每个标准容器具有beginend方法,返回的迭代器是容器.然而,C++ 11显然已经引入自由函数调用std::beginstd::end该调用beginend成员函数.所以,而不是写作

auto i = v.begin();
auto e = v.end();
Run Code Online (Sandbox Code Playgroud)

你会写的

using std::begin;
using std::end;
auto i = begin(v);
auto e = end(v);
Run Code Online (Sandbox Code Playgroud)

在他的演讲中,编写现代C++,Herb Sutter说当你想要容器的开始或结束迭代器时,你应该总是使用自由函数.但是,他没有详细说明你想要的原因.查看代码,它可以为您节省一个字符.因此,就标准容器而言,自由函数似乎完全没用.Herb Sutter表示非标准容器有好处,但他再次没有详细说明.

因此,问题是除了调用相应的成员函数版本之外,自由函数版本究竟做了什么,std::begin并且std::end做了什么,为什么要使用它们呢?

c++ iterator stl c++11 container-data-type

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

vector :: begin()和std :: begin()之间的区别

在c ++中迭代一个向量时,我注意到begin()标准库中有一个函数,还有一个begin()作为类的成员函数vector.如果有的话,两者之间的区别是什么,哪一个应该用于另一个?

例:

vector<int> numbers;
//Code to put values in my vector
for (vector<int>::iterator i = numbers.begin(); i < numbers.end(); i++)
    cout << *i << '\n';
Run Code Online (Sandbox Code Playgroud)

VS:

vector<int> numbers;
//Code to put values in my vector
for (vector<int>::iterator i = std::begin(numbers); i < std::end(numbers); i++)
    cout << *i << '\n';
Run Code Online (Sandbox Code Playgroud)

c++ vector

19
推荐指数
2
解决办法
4863
查看次数

暴露自定义STL样式迭代的首选方法是什么?

(另请参阅是否有一种很好的方法可以在C++中为自定义类型手写所有12个所需的Container函数?)


对于像这样的课程

namespace JDanielSmith {
class C
{
    const size_t _size;
    const std::unique_ptr<int[]> _data;

public:
    C(size_t size) : _size(size), _data(new int[size]) {}

    inline const int* get() const noexcept { return _data.get(); }
    inline int* get() noexcept { return _data.get(); }

    size_t size() const noexcept { return _size; }
};
}
Run Code Online (Sandbox Code Playgroud)

暴露迭代的首选方式是什么?我应该写begin()/ end()(和cbegin()/ cend())成员函数吗?

const int* cbegin() const {
    return get();
}
const int* cend() const {
    return cbegin() + size();
}
Run Code Online (Sandbox Code Playgroud)

或者这些应该是非会员职能? …

c++ iterator stl

8
推荐指数
2
解决办法
687
查看次数

我应该阅读哪个C++ ISO标准的PDF?

有时,我想自己从C++标准中搜索答案.阅读标准可能有助于我概述所提出的语言原则.

通过搜索互联网,我感到困惑的是充斥着C++论坛和帮助网站.它们提供各种PDF文件供阅读.

我不知道应采用哪个PDF文件和/或哪个版本.

我找到了几个网站:

我想知道是否有一个标准发布的网站.在解决问题时我应该参考哪个版本?有人说C++ 98,有些人说C++ 11,甚至是最新的工作草案.(许多草稿令我困惑).


编辑
我从标准中找到了一个有用的信息,其中写道:

除了最终的标准/报告外,所有C++委员会文件都是免费公开发布的,包括所有工作草案,其中许多与发布的标准非常接近.2012年1月的工作草案包含C++ 11标准以及次要的编辑更改.

2012年1月的工作草案是N3337.
希望这能帮到你们.


编辑
来自 Wiki C++ 11,它写道:

与已发布的C++ 11标准最相似的工作草案是2012年1月12日的N3337; 它只有C++ 11标准的编辑更正.

c++ standards iso

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

如何解决此错误:二进制表达式('std :: vector &lt;double&gt;'和'double')无效的操作数?

我想获得一些陀螺仪读数的平均值,它涉及将一个std::vector<double>类型与一个双精度类型相除,但是出现以下错误,该错误报告

无效的二进制二进制操作数(“ std :: vector”和“ double”)

我该如何解决?


    double n_readings;
    std::vector<double> gyro_reading;
    for(int i = 0; i < n_readings; i++) {

        gyro_reading.push_back(gyro_z());
        msleep(1);

    }

    double average = gyro_reading/n_readings;
Run Code Online (Sandbox Code Playgroud)

c++ algorithm vector operators

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