jjzjj

c++ - STL 算法 : Why no additional interface for containers (additional to iterator pairs)?

我想知道为什么STL不会重载它们的算法函数,这样我就可以通过简单地提供一个容器而不是采用更冗长的方式来传递begin+end迭代器来调用它们。我当然理解为什么我们还想使用迭代器对来处理容器/数组的子序列,但是,几乎所有对这些方法的调用都使用了整个容器:std::for_each(myVector.begin(),myVector.end(),doSomething);我会发现只写更方便、可读和可维护std::for_each(myVector,doSomething);STL不提供这些重载是否有原因?[编辑:我的意思不是用这个受限的接口(interface)替换接口(interface

c++ - 对 STL 的头文件

我习惯于使用STLpair编写代码,而不包括任何特定的头文件来使用pair。但是今天一位friend告诉我,每当我使用pair时,我都应该使用utilityheader,否则我会在某些编译器上遇到问题。请告诉这是不是真的。如果我可以不使用它来编写代码,那么实用程序头有什么用。 最佳答案 您应该几乎总是为您在程序中使用的每个类包含头文件,否则您取决于某些头文件在内部使用您感兴趣的类的事实,但这可能会在另一个编译器或版本上发生变化。您需要阅读一个类的引用(例如在cppreference.com-http://en.cppreferenc

c++ - 对 STL 的头文件

我习惯于使用STLpair编写代码,而不包括任何特定的头文件来使用pair。但是今天一位friend告诉我,每当我使用pair时,我都应该使用utilityheader,否则我会在某些编译器上遇到问题。请告诉这是不是真的。如果我可以不使用它来编写代码,那么实用程序头有什么用。 最佳答案 您应该几乎总是为您在程序中使用的每个类包含头文件,否则您取决于某些头文件在内部使用您感兴趣的类的事实,但这可能会在另一个编译器或版本上发生变化。您需要阅读一个类的引用(例如在cppreference.com-http://en.cppreferenc

c++ - 比较两个map::iterators:为什么需要std::pair的拷贝构造函数?

下面非常简单的代码在C++98中编译和链接时不会出现警告,但在C++11模式下会出现难以理解的编译错误。#includestructA{A(A&);//m;returnm.begin()==m.end();//line9}-std=c++11的错误是,gccversion4.9.020140302(experimental)(GCC):ali@X230:~/tmp$~/gcc/install/bin/g++-std=c++11cctor.cppInfileincludedfrom/home/ali/gcc/install/include/c++/4.9.0/bits/stl_algob

c++ - 比较两个map::iterators:为什么需要std::pair的拷贝构造函数?

下面非常简单的代码在C++98中编译和链接时不会出现警告,但在C++11模式下会出现难以理解的编译错误。#includestructA{A(A&);//m;returnm.begin()==m.end();//line9}-std=c++11的错误是,gccversion4.9.020140302(experimental)(GCC):ali@X230:~/tmp$~/gcc/install/bin/g++-std=c++11cctor.cppInfileincludedfrom/home/ali/gcc/install/include/c++/4.9.0/bits/stl_algob

c++ - 如何避免 'implicit' 在 std::pair 中调用单参数构造函数

最初的问题是如何使用std::map>以一种安全的方式,因为相同类型的键和值非常容易出错。所以我决定为这个值创建一个简单的包装器:structComponentName{std::wstringname;//Iwanttoprohibitanyimplicitstring-ComponentNameconversions!!!explicitComponentName(conststd::wstring&_name):name(_name){}booloperatorcomponent_names_map;但是下面的代码运行良好!component_names_mapcomponent

c++ - 如何避免 'implicit' 在 std::pair 中调用单参数构造函数

最初的问题是如何使用std::map>以一种安全的方式,因为相同类型的键和值非常容易出错。所以我决定为这个值创建一个简单的包装器:structComponentName{std::wstringname;//Iwanttoprohibitanyimplicitstring-ComponentNameconversions!!!explicitComponentName(conststd::wstring&_name):name(_name){}booloperatorcomponent_names_map;但是下面的代码运行良好!component_names_mapcomponent

c++ - `pair::operator=(pair&&)` 错误与 `auto&` 推断 move 操作 - libstdc++ 回归?

鉴于这个程序:structVal{Val()=default;Val(Val&&)=default;auto&operator=(Val&&);};/*PLACEHOLDER*/auto&Val::operator=(Val&&){return*this;}替换/*PLACEHOLDER*/与...intmain(){std::vector>v;v.emplace(std::begin(v),0,Val{});}...编译成功:g++6.2.0g++6.3.0g++7.0.1(主干)clang++3.9.1clang++5.0.0(HEAD)onwandbox替换/*PLACEHOLD

c++ - `pair::operator=(pair&&)` 错误与 `auto&` 推断 move 操作 - libstdc++ 回归?

鉴于这个程序:structVal{Val()=default;Val(Val&&)=default;auto&operator=(Val&&);};/*PLACEHOLDER*/auto&Val::operator=(Val&&){return*this;}替换/*PLACEHOLDER*/与...intmain(){std::vector>v;v.emplace(std::begin(v),0,Val{});}...编译成功:g++6.2.0g++6.3.0g++7.0.1(主干)clang++3.9.1clang++5.0.0(HEAD)onwandbox替换/*PLACEHOLD

c++ - 初始化相互引用的对象

考虑以下一对相互引用的类型:structA;structB{A&a;};structA{B&b;};这可以在GCC、Clang、Intel、MSVC中使用聚合初始化来初始化,但SunPro坚持需要用户定义的ctors。struct{Afirst;Bsecond;}pair={pair.second,pair.first};这种初始化合法吗?更详细的演示:http://ideone.com/P4XFw现在,听从Sun的警告,带有用户定义构造函数的类呢?以下适用于GCC、clang、Intel、SunPro和MSVC,但是否合法?structA;structB{A&ref;B(A&a):r