由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
Programming版 - 一个小程序差点搞死了g++,怎么回事?
相关主题
请教c++的string vector问题,谢谢! (转载)[合集] 问个面试题
C++中使用back_inserter为啥可以不用#include 和using std::back_inserter;??VC++ 6.0 弱问,多谢解答
stl container erase in a loopdeque的pointer和reference是怎么回事?
c++ template question:请教一个c++ map问题
namespace defined in another fileSTL iterator的疑问
wiki上关于map的这段程序为什么不work?如何把文件内容读到2D的vector里?
再问两个C++问题说c++不难的欢迎来看看这个
Question about STL感觉实在太变态了
相关话题的讨论汇总
话题: stringset话题: std话题: string话题: include话题: insert
进入Programming版参与讨论
1 (共1页)
e**********n
发帖数: 359
1
#include "temp.hh"
#include
main() {
StringSet constStrs;
for(StringSet::iterator it = constStrs.begin(); it!=constStrs.end();
it++) {
std::cout << *it <<" ";
}
}
其中 “temp.hh" 为:
#include
#include
class StringSet : public std::set {
public:
StringSet(){
insert( std::string("0"));
insert( std::string("1"));
......
insert( std::string("3999"));
};
};
总共往StringSet里添加了4000个字符串,此处为了简单用0到3999,但实际上可以是任
意的字符串。
用 g++ -g 编译很快完事
e**********n
发帖数: 359
2
把set换成list或vector,还是有同样的问题。

);

【在 e**********n 的大作中提到】
: #include "temp.hh"
: #include
: main() {
: StringSet constStrs;
: for(StringSet::iterator it = constStrs.begin(); it!=constStrs.end();
: it++) {
: std::cout << *it <<" ";
: }
: }
: 其中 “temp.hh" 为:

p***o
发帖数: 1252
3
要是最新版本也有问题就去报告个bug把。

【在 e**********n 的大作中提到】
: 把set换成list或vector,还是有同样的问题。
:
: );

d****p
发帖数: 685
4
This program should work, but poorly written.
Never inherit from STL container class.
h*******u
发帖数: 15326
5
实在没搞明白stl这些container为什么就不给个virtual析构函数,
有时候如果能继承stl容器真是方便多了

【在 d****p 的大作中提到】
: This program should work, but poorly written.
: Never inherit from STL container class.

e**********n
发帖数: 359
6
I moved the strings to a global array
char *constStr[] = {"0", "1"...."3999"};
and inserted the strings into a StringSet using a for loop. This time g++ -O3
finished quickly, and the size of
the executable file is also 10 times smaller.
I don't think inheriting from STL container is the cause here. g++ seems to
do too much optimization for the
4000 lines of insert(...), also probably in an incorrect way. The for loop
gives g++ little to optimize.

【在 d****p 的大作中提到】
: This program should work, but poorly written.
: Never inherit from STL container class.

d****p
发帖数: 685
7
For performance reasons. calling virtual function is slow.

【在 h*******u 的大作中提到】
: 实在没搞明白stl这些container为什么就不给个virtual析构函数,
: 有时候如果能继承stl容器真是方便多了

X****r
发帖数: 3557
8
继承往往是错误的修改已有类行为的方式。

【在 h*******u 的大作中提到】
: 实在没搞明白stl这些container为什么就不给个virtual析构函数,
: 有时候如果能继承stl容器真是方便多了

d**a
发帖数: 84
9
这样写没啥问题, 你为啥要继承呢?
====================================================
using namespace std;
typedef set StringSet;
inline string to_string(int i) {
stringstream ss;
ss< return ss.str();
}
int main() {
StringSet constStrs;
for(int i=0; i<4000; ++i) {
constStrs.insert(to_string(i));
}
for(StringSet::iterator it = constStrs.begin(); it!=constStrs.end();
it++) {
std::cout << *it <<" ";
}
}

);

【在 e**********n 的大作中提到】
: #include "temp.hh"
: #include
: main() {
: StringSet constStrs;
: for(StringSet::iterator it = constStrs.begin(); it!=constStrs.end();
: it++) {
: std::cout << *it <<" ";
: }
: }
: 其中 “temp.hh" 为:

d**a
发帖数: 84
10
下面在我这里也没问题
Ubuntu 2.6.28-15-generic, x86_64
g++ (Ubuntu 4.3.3-5ubuntu4) 4.3.3
============================
#include "temp.hh"
#include
main() {
StringSet constStrs;
for(StringSet::iterator it = constStrs.begin(); it!=constStrs.end();
it++) {
std::cout << *it <<" ";
}
}
===============temp.hh===============
#include
#include
#include
using std::string;
using std::stringstream;
inline string to_string(int i) {
str

【在 e**********n 的大作中提到】
: #include "temp.hh"
: #include
: main() {
: StringSet constStrs;
: for(StringSet::iterator it = constStrs.begin(); it!=constStrs.end();
: it++) {
: std::cout << *it <<" ";
: }
: }
: 其中 “temp.hh" 为:

1 (共1页)
进入Programming版参与讨论
相关主题
STL感觉实在太变态了namespace defined in another file
关于inserterwiki上关于map的这段程序为什么不work?
[合集] 如何得到一个指向STL元素的指针?再问两个C++问题
c++ interview: iterator 和 pointer区别?Question about
请教c++的string vector问题,谢谢! (转载)[合集] 问个面试题
C++中使用back_inserter为啥可以不用#include 和using std::back_inserter;??VC++ 6.0 弱问,多谢解答
stl container erase in a loopdeque的pointer和reference是怎么回事?
c++ template question:请教一个c++ map问题
相关话题的讨论汇总
话题: stringset话题: std话题: string话题: include话题: insert