Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ STL专家在面试中应该回答哪些问题_C++_Stl - Fatal编程技术网

C++ STL专家在面试中应该回答哪些问题

C++ STL专家在面试中应该回答哪些问题,c++,stl,C++,Stl,我最近在看一份招聘启事,其中一项要求是,一个人在STL方面的知识必须达到9/10 当我评判我的技能时,对我来说,10分是写这方面高级书籍的人,比如Jon Skeet(C#)、John Resig(JavaScript)或Martin Odersky(Scala) 所以,9/10基本上就是10,所以我不确定在这个水平上会发生什么 以下是一些问题的示例: 显然,需要一些编码,但所有的东西都应该被记住,因为STL中有很多东西 在某些情况下,Boost库扩展了STL,所以我也应该使用Boost,因为有时

我最近在看一份招聘启事,其中一项要求是,一个人在STL方面的知识必须达到9/10

当我评判我的技能时,对我来说,10分是写这方面高级书籍的人,比如Jon Skeet(C#)、John Resig(JavaScript)或Martin Odersky(Scala)


所以,9/10基本上就是10,所以我不确定在这个水平上会发生什么

以下是一些问题的示例:

显然,需要一些编码,但所有的东西都应该被记住,因为STL中有很多东西

在某些情况下,Boost库扩展了STL,所以我也应该使用Boost,因为有时我可能会混淆哪一个函数来自这两个库中的哪一个

我想知道我是否能回答一个STL专家的问题,尽管奇怪的是,C++专家不是一个要求。 更新


在对我的问题的答案进行反思之后,他们似乎在寻找一个能够看到STL的局限性并扩展库的人,而这是我没有做过的。我习惯于在STL和Boost给我带来的限制范围内思考,并保持在规定范围内。我可能需要开始考虑这是否太过有限,看看我是否能跳出禁区。我希望他们的意思不是像谷歌那样是9

> P> >你可以进入采访中说:“我注意到你的帖子要求有知识的STL人,但是这个术语有时被用来指:(1)C++标准库;(2)斯特潘诺夫在HP设计的库;(3)基于[2 ]的[1 ]部分;(4)[6]、[2 ]或[3 ]的特定供应商实现;(5)[2]的基本原则。因此,这个术语非常模糊,必须非常谨慎地使用。如果你是指[1]并坚持缩写,“stdlib”是一个更好的选择。”*

老实说,因为它是一个库,所以它有点有限,可能无法像一种语言本身那样构成令人恶心的无限。所以我想说,任何让他们使用一些stdlib算法的问题都会有效,看看他们是否了解这些算法


由于迭代器是stdlib不可分割的一部分,我也可能会要求他们“将向量中的所有整数放入标准输出”。我希望类似这样:

// thanks to onebyone
std::copy(vec.begin(), vec.end(), std::ostream_iterator<int>(std::cout, " ");
template<typename InputIter>
void Output(InputIter it, InputIter end) {
    while(it != end)
        std::cout << *it++;
}
这些可能不是9/10的问题,而是我认为2-3/10应该知道的有趣的问题

我想说的一个9/10困难是在不使用boost流基类的情况下正确地编写派生的iostream。但是使用stdlib和扩展它之间可能有很大的区别


*(感谢《弗里诺德的C++》的引用)

< P>搞笑——我不认为自己是STL的9/10(我以前是,但我现在有点生疏),我完全同意约瑟佩里的重要术语区别(我经常记录下,谴责STL的滥用)。最初由SGI的STL“!”所启发的C++标准库的部分,但我认为他的示例代码比“最佳STLY”要小。我是说,对于给定的任务,“把所有的整数放在向量中去标准化”。为什么有人会说<强> < /强>代码,如@ JasHabry建议,

for(std::vector<int>::iterator it = intVect.begin(); it != intVect.end(); ++i)
    std::cout << *it;
for(std::vector::iterator it=intVect.begin();it!=intVect.end();++i)

对一份工作来说,这只是一个愚蠢的要求。当你招聘一名优秀的程序员时,首先要有专业知识

在今天这个时代,期望对STL有知识/熟悉/等等是合理的。但是,除非工作是重新实现STL,否则你不需要9/10。即使是这样的工作,你仍然需要一个伟大的程序员,他对模板有着丰富的经验(不仅仅是使用模板)

例如,对于“输出向量的整数”的所有答案,可能会生成完全相同的代码。只有已模板化以处理任何项的任何容器的版本显示“好”与“好”的提示(只是提示)。即抽象能力

无论如何,去做吧。准备好使用STL来帮助解决其他问题。没什么了


(事实上,在我参加的大多数面试中,要求不要使用STL.ie-编写一个反转字符串的函数。我的第一个答案是,std库中可能有这样的东西。然后他们说,对,当然,但是如果你必须自己写呢…)

我应该在前面指出,我认为同样的标准不仅适用于STL(无论您喜欢哪个定义),也适用于许多其他类型的事物

从我的角度来看,简单地了解现有的STL组件并能够很好地应用它们,可能不符合9/10。相反,我认为7/10到8/10的级别是当人能够通过提供遵循其哲学的新组件和自然地和容易地与现有组件相匹配时扩展STL。


到9月10日,我希望看到有人不仅能够提供新的组件,而且能够改进一些现有组件,例如Boost::bind。到10月10日,我希望看到这超越9月10日的一些特别的、本地化的改进,并转向更具体系结构的级别,例如使用范围而不是单个I对于一个具体的例子,考虑Boost的范围和Andrei Alexandrescu对于范围的想法之间的差异。Boost的范围是方便、有用和方便的,但是它们改变了你的类型,而不是你的想法。安德烈版本的范围更为全面——一个改变你设计和思考AB的架构解决方案。输出代码,而不仅仅是如何键入。

9/10是非常主观的。有人问了我一些关于STL的好问题。以下是示例:

  • 什么时候应该使用deque vs矢量
    for(std::vector<int>::iterator it = intVect.begin(); it != intVect.end(); ++i)
        std::cout << *it;
    
    std::copy(intVect.begin(), intVect.end(), std::ostream_iterator<int>(std::cout));