Tag: stl

初始化一个vectorstring数组

是否有可能初始化一个向量数组的string。 例如: static std::vector<std::string> v; //声明为类成员 我用static只是初始化和填充string。 或者我应该只填写它的构造函数,如果它不能像我们做常规数组初始化。

STL中是否有“魔术”?

让我开始解释我的意思是“魔术”。 我将使用来自Java的两个示例: 每个类都inheritance(直接或间接) Object类。 运算符重载不受Java支持,但+运算符是为String对象定义的。 这意味着在纯Java(*)中不可能实现Object和String类。 现在这就是我所说的“魔术”:为了实现这些类,你需要编译器的一些特殊的支持。 我一直很喜欢C ++,就我所知,在STL中没有这样的“魔术”,也就是说可以在纯C ++中实现STL。 现在我的问题是:这是真的吗? 还是有部分STL无法在纯C ++中实现,需要一些“魔术”/特殊的编译器支持? (*)“纯”的意思是不使用任何类库。

将ostream转换为标准string

我对C ++ STL很新,所以这可能是微不足道的。 我有一个ostreamvariables,其中包含一些文本。 ostream* pout; (*pout) << "Some Text"; 有没有一种方法来提取stream并将其存储在char*types的string中?

C ++中向量的通用向量

用C ++来实现(或伪造)一个向量的通用向量的types是否有一个好的方法? 忽略vectorvector何时是好主意的问题(除非有相同的东西总是更好)。 假设它确实对问题build模,并且matrix不能准确地模拟问题。 还假设以这些东西为参数的模板化函数需要操作结构(例如调用push_back),所以它们不能只支持[][]的通用types。 我想要做的是: template<typename T> typedef vector< vector<T> > vecvec; vecvec<int> intSequences; vecvec<string> stringSequences; 但当然这是不可能的,因为typedef不能被模板化。 #define vecvec(T) vector< vector<T> > 是接近的,并且可以节省每个在vecvecs上运行的模板化函数的types,但不会被大多数C ++程序员所欢迎。

什么是迭代器的默认值?

对于我正在使用的任何STL容器,如果使用迭代器的默认构造函数声明迭代器(此特定容器types的),迭代器将被初始化为什么? 例如,我有: std::list<void*> address_list; std::list<void*>::iterator iter; 什么将被初始化?

std :: set和std :: vector有什么区别?

我正在学习STL。 我读了关于集装箱。 我有问题,当你想使用set ? 在阅读set的描述之后,它看起来像是无用的,因为我们可以用vector来代替它。 你可以说vector与set容器的利弊? 谢谢

合并两个STL地图

我怎样才能将两个STL地图合并成一个? 他们都有相同的键值types(地图)。 如果有重叠的键,我想优先考虑其中一个地图。

检查迭代器是否有效

有什么办法来检查一个迭代器(无论是从vector,列表,双向…)是(仍然)无法引用,即没有失效? 我一直在使用try – catch ,但有没有更直接的方法来做到这一点? 例子:(不起作用) list<int> l; for (i = 1; i<10; i++) { l.push_back(i * 10); } itd = l.begin(); itd++; if (something) { l.erase(itd); } /* now, in other place.. check if itd points to somewhere meaningful */ if (itd != l.end()) { // blablabla }

为什么大多数STL实现中的代码如此复杂?

STL是C ++世界的重要组成部分,大多数实现都是由Stepanov和Musser最初的努力所衍生出来的。 我的问题是代码的关键性,它是人们查看编写良好的C ++的例子,敬畏和学习的主要来源之一:为什么STL的各种实现如此令人厌恶地看着 – 令人费解和一般很好的例子,从美学的angular度来看如何不写C ++代码。 下面的代码示例不会在我工作的地方通过代码审查,因为variables命名,布局,macros和使用操作符的原因不尽相同,因为这些操作符需要的不仅仅是简单的一瞥,而是要查明实际发生的事情。 template<class _BidIt> inline bool _Next_permutation(_BidIt _First, _BidIt _Last) { // permute and test for pure ascending, using operator< _BidIt _Next = _Last; if (_First == _Last || _First == –_Next) return (false); for (; ; ) { // find rightmost element smaller than successor _BidIt _Next1 = […]

如何删除所有在c + +string中出现的字符

我正在使用以下内容: replace (str1.begin(), str1.end(), 'a' , '') 但是这是编译错误。