是否可以仅使用C++编写完整的C++标准库(当然包括STL,但只包含内部依赖项)?我会想象容器和<cstdlib>功能将在以下方面可行charS,bitshifts,以及循环和其他字节花哨的东西,但这样的东西例外,或许std::cout并std::cin似乎很难给我一个不依赖开始.假设有一组可用的OS功能,它们完全在汇编中实现(以避免任何C污染).
我假设编译器理解从类和虚函数到模板和函数重载的所有内容,这些是语言级别的东西,并且在库IMHO中没有位置.
如果以前曾经问过这个问题或者是一个非常愚蠢的问题,请原谅我.我不打算在这里开始一场C < - > C++战争,只是想弄清楚实施野兽的局限性,比如标准库...
谢谢!
符合C++ 98/03/0x实现的所有函数是否完全符合C99?
我认为C++ 0x添加了一些C99(语言)功能,但从未听过或读过任何关于C库函数的确定性.
为了避免任何混淆,我在谈论使用<c*>标头集中声明的函数的C++程序.
谢谢.
我想从向量中删除一些迭代器,所以这就是我现在所拥有的.
void function(std::vector <class*> & vector)
{
std::vector <class*>::iterator it;
for(it = vector.begin(); iter != vector.end(); ++iter)
{
if(it->value == 1)
vector.erase(it);
}
Display(vector);
return;
}
Run Code Online (Sandbox Code Playgroud)
显然,当迭代器被移除时,这个代码给了我一个错误,它是向量中的最后一个,否则看起来它工作正常.我知道在这样的循环中修改向量可能不是理想的行为,但如果我必须这样做,那么最好的方法是什么?
谢谢.
我写了一些我试图修复的有缺陷的Huff压缩代码.我做的第一件事就是将指针切换到auto_ptr(有理由我没有使用另一个智能指针).我创建了一个向量,auto_ptr但是当我尝试将auto_ptr传递给函数时,*(vector.begin())它不起作用.
我的功能代码我试图将所有权传递给(它是一个成员函数为set_node):
struct Node {
int weight;
char litteral;
auto_ptr<Node> childL;
auto_ptr<Node> childR;
void set_node(int w, char l, auto_ptr<Node>& L(), auto_ptr<Node>& R()){
weight = w;
litteral = l;
childL = L;
childR = R;
}
};
Run Code Online (Sandbox Code Playgroud)
这就是我尝试调用它的方式(p是节点):
p.set_node(w, '*', *nodes->begin(), *(nodes->begin()+1));
Run Code Online (Sandbox Code Playgroud)
这是向量声明的方式:
vector<auto_ptr<Node> >* nodes = new vector<auto_ptr<Node> >;
Run Code Online (Sandbox Code Playgroud) 事实证明,PyQt重新定义了一个函数hex(),遗憾的是它使python标准库hex()无法使用.我正在开发一个大型软件项目,它已经设置了*进口:
from PyQt4.QtCore import *
from PyQt4.QtGui import *
Run Code Online (Sandbox Code Playgroud)
...等等
我需要标准的python hex()函数,有什么方法可供我参考吗?我在想一个stdlib.hex()或类似的东西?
目前我丑陋的解决方法是:
pyHex = hex
from PyQt4.QtCore import *
from PyQt4.QtGui import *
hex = pyHex
Run Code Online (Sandbox Code Playgroud)
我真的更愿意不必这样做.
谢谢.
有没有一个很好的理由为什么NumericScala标准库中没有maxValue和minValue函数.它似乎相当有用,甚至在某些情况下使用它也是必要的.
例如,一个人可能能够定义像这样的scalacheck生成器:
def arbNumeric[T:Choose](implicit num: Numeric[T): Arbitrary[T] = {
Arbitrary(Gen.chooseNum(num.MinValue, num.MaxValue))
}
Run Code Online (Sandbox Code Playgroud)
而不是必须为每个Int,Long等写出相同的东西:
val arbInt: Arbitrary[Int] = {
Arbitrary(Gen.chooseNum(Int.MinValue, Int.MaxValue))
}
def arbLong: Arbitrary[Long] = {
Arbitrary(Gen.chooseNum(Long.MinValue, Long.MaxValue))
}
def arbShort: Arbitrary[Short] = {
Arbitrary(Gen.chooseNum(Short.MinValue, Short.MaxValue))
}
...
Run Code Online (Sandbox Code Playgroud) Python包含内置的max()函数.但是,尽管它内置于它不是一个关键字.也就是说,你被允许这样做max=4.这是有道理的,因为最大的东西出现了很多.但!如果使用max作为变量,则禁用该范围中的max函数.
所以,如果你这样做:
max = 4
max(1, 2)
Run Code Online (Sandbox Code Playgroud)
你会得到一个错误int object not callable.再次,有道理.但有没有办法指定你想要max函数?喜欢std.max()?这适用于所有其他内置功能.
我正在研究一个使用矢量的程序.所以我做的第一件事是声明我的矢量.
std::vector<double> x;
x.reserve(10)
Run Code Online (Sandbox Code Playgroud)
(顺便说一句,这也被认为是不好的做法吗?我应该输入std::vector<double> x(10)吗?)
然后我继续为向量赋值,并询问它的大小.
for (int i=0; i<10; i++)
{
x[i]=7.1;
}
std::cout<<x.size()<<std::endl;
Run Code Online (Sandbox Code Playgroud)
我不知道它会返回0,所以经过一些搜索我发现我需要使用push_back方法而不是索引操作符.
for (int i=0; i<10; i++)
{
x.push_back(7.1);
}
std::cout<<x.size()<<std::endl;
Run Code Online (Sandbox Code Playgroud)
现在又回来了10.
所以我想知道的是为什么索引操作符允许我x在给定索引处访问向量中的"存储"值,但不会改变其大小.另外,为什么这是不好的做法?
我想知道函数memcmp必须返回什么.
我一直在互联网上搜索,通常,memcmp定义说明如下:
memcmp()函数返回一个大于,等于或小于零的整数,因为s1指向的对象大于,等于或小于s2指向的对象.
这是从来没有明确说什么,究竟,则返回:这是两个字节的值之间的差异,或者是-1,0或1?我很迷惑:
memcmp在小程序中测试函数时,即使评估的两个字节之间的差值大于1或小于-1,它也会返回-1,0或1.memcmpInternet上命名的函数时,它们几乎都返回2个字节之间的差异,作为int,而不是返回-1,0或1.由于我无法得到足够精确的函数定义memcmp,我在这里问这个问题:究竟是什么函数memcmp应该返回?在某处有"官方"源代码吗?(我已经看过很多源代码,memcmp但没有给我一个答案:我假设它们不是写在库string.h中的函数,至少不在我的计算机上......)
我知道std::priority_queue该类实现了最小堆。有没有办法将其用作最大堆?还是有替代的Maxheap结构?我知道我可以std::make_heap()在std::vectorlambda 上使用该函数来创建自己的Maxheap,但是随后使用诸如std::pop_heap()怪异的函数,并且我认为它们不易于使用。应该有一种更简单的方法,就像我认为的min_heap(priority queue)。
c++ priority-queue standard-library c++-standard-library max-heap