m*******s 发帖数: 22 | 1 Hi,
I wrote a c program, complied and ran with linux g++. It is no problem with
first 26 runs, I mean, I got the output which I want exactly. However, an
error message is got in the 27th run, that is:
terminate called after throwing an instance of 'std::bad_alloc'
what(): St9bad_alloc
Aborted
Anyone has an idea about how to solve this problem? Thanks a lot. |
|
t****d 发帖数: 8 | 2 看到网上一个解释:
void reserve(uint res_arg = 0)
change the capacity of a String to the maximum of res_arg and size(). This
may be an increase or a decrease in the capacity.
这个对吗? 我做了个简单的测试,跟踪 i 的值,但是在reserve前后没有变化,哪位
指点一下,谢谢了。
std::string str1("abcdefgh");
int i=str1.size(); // 结果是8
i=str1.capacity(); // 结果是15
str1.reserve(4);
i=str1.capacity(); // 结果是15
i=str1.size(); // 结果是8 |
|
j****i 发帖数: 305 | 3 I don't have access to the computer I was testing lapack. I can try what you
suggested and I think it might work, since
max has no "(" followed.
But what about the complex class in c++, which I cannot and do not want to
change. In that class the std::abs() function is used. There got to be a way
to solve this systematically. |
|
m*******s 发帖数: 22 | 4 Hi,
I wrote a c program, complied and ran with linux g++. It is no problem with
first 26 runs, I mean, I got the output which I want exactly. However, an
error message is got in the 27th run, that is:
terminate called after throwing an instance of 'std::bad_alloc'
what(): St9bad_alloc
Aborted
Anyone has an idea about how to solve this problem? Thanks a lot. |
|
h******6 发帖数: 5 | 5 下面的这段代码为什么会出错? 谢谢!
#include
#include
class Stack{
public:
Stack();
~Stack(){delete[] _buffer;}
private:
const int _capacity;
int _size;
int *_buffer;
Stack & operator = (const Stack& rhs );
};
Stack::Stack():_capacity(10), _size(0){
_buffer = new int[_capacity];
}
int main(){
std::vector stackArray(3);
} |
|
z****e 发帖数: 2024 | 6 Stack(const Stack& s):_capacity(s._capacity), _size(s._size){
if(s._buffer){
_buffer=new int[_capacity];
std::copy(s._buffer, s._buffer+_capacity, _buffer);
}
else
_buffer=0;
}; |
|
p****o 发帖数: 1340 | 7 std::vector uses copy to initial the vector: basically the same Stack object
is copied three times to fill stackArray.
it is efficient for most cases, while failed here... |
|
i*****e 发帖数: 113 | 8 这里有一个问题
如果自己copy自己的时候,内存就泄露了
Stack(const Stack& s):_capacity(s._capacity), _size(s._size){
if(s._buffer){
_buffer=new int[_capacity];
std::copy(s._buffer, s._buffer+_capacity, _buffer);
}
else
_buffer=0;
}; |
|
z****e 发帖数: 2024 | 9 为什么多线程计时的时候就不准了呢?
mywork是一个干活的类,里边对n1和n2分别进行计算,用cal1和cal2函数。
然后生成两个线程类,都引用同一个mywork,算cal1和cal2.
比较对象是一个普通函数f()。
我明明,用手表计时,发现多线程是快的,大概19秒左右完成,看任务管理器的cpu实用状态也大体符合20秒。
怎么用程序计时,就是这个输出了呢?太奇怪了,真着急。
output:
1000000000
33.84 seconds elapsed for multithreading.(这句话出现的时候,其实是20秒)
1000000000
27.82 seconds elapsed for one thread.
以下是源码。
#include
#include
#include
using namespace std;
const long long int M=5e8;
class mywork{
public:
mywork():n1(1),n2(1),flag1(0),flag2(0){}
void |
|
|
p***o 发帖数: 1252 | 11
Second you. Moreover, typing something like std:: brings IntelliSense. |
|
f*******y 发帖数: 988 | 12 现在流行直接写std::xyz
不要让你的东西污染标准空间 |
|
s****a 发帖数: 238 | 13 我的程序里需要用到一个std::map的对象,其中l_set是我定义的一个类型
,为了能作为map的key为这个类型定义了<算符。但是后来发现有些情况下明明确定这
个map已经正确初始化了,其中有某个key,但是取出的值总是0,但大多数时候运行有
是正常的。
后来我遍历了这个map,发现它有两次遇到这个key,第一次对应的value是正确的,第
二次就变成0了,但显然在map不可能有两个同样的key。我觉得我的<应该没有问题(非
常简单),对map得实现由不是很清楚,所以现在束手无策,对stl比较熟的能不能给点
线索。 |
|
L*******s 发帖数: 63 | 14 Cause C-Style strings (char*) are not compared by < or >.
Use std::string or any string classes that have those operator overloaded. |
|
T********i 发帖数: 2416 | 15 说实话我觉得C++11过分了。这种东西完全不考虑体系结构。尤其在cloud上,或者其他
virtualization之上,可能runtime得到的configuration都是假的。以为用这东西能创
建纯非确定图灵机的都会死得很惨。
P.S.我主要是说std::future。 |
|
t****t 发帖数: 6806 | 16 没看法, 我觉得他说的跟用不用std::thread关系不大. 线程里的exception总是要分开
处理的. |
|
N******K 发帖数: 10202 | 17 1G的运算结果 你不用std::move 用啥 |
|
r*********e 发帖数: 20 | 18 最近遇到一个字符串处理的题,要求是必须保证8 bit clean,传进来的字符串是const
unsigned char*, 我想把它转成std::string 然后一个个字符来处理,请问这样做的
话还是8 bit clean吗? |
|
h**********c 发帖数: 4120 | 19 std::vector 只放class ojects吧,还是和java 混了,
不能放primitive type |
|
b***i 发帖数: 3043 | 20 看来是copy,因为move需要std::move
那么,如果这个类的成员变量是vector poles的话,poleManager本身是另一个
类生成的singleton实例的指针,那么它的内容应该在堆上,这样的话整个过程从
PoleAcess::Load那里是在栈上生成一个vector,最后需要move到堆上吗?当然如果移
动,也不是很大数据量,因为只是这个vector自己的数据,而不是整个内容。
RVO能否知道本来为了要放到堆上而优化? |
|
L****8 发帖数: 3938 | 21 std::vector啥都能放 不过不要放bool |
|
i***c 发帖数: 26 | 22 new std::vector(PoleAccess::Load(...)) 是 move construct,PoleAccess:
:Load的返回值没有名字,是rvalue |
|
|
h**l 发帖数: 168 | 24 1 这样的话,是不是一开始有一个vector在栈上,然后为了返回堆上的指针,把内容复
制到了堆上?
yeah, just copy the container info from stack to heap.
2 这个new std::vector(Pole)是move constructor还是copy?
should be move as the method returns r-value.
3 但是为了把栈上的变量移动到堆上,还是得copy吧?当然,只是一个vector容器的信
息而已,真正vector内容都在堆上吧。而且,内容指向的Pole对象也都在堆上。
move constructor of the vector container is used, the container information
is copied from stack to heap, the vector elements (Pole*) are moved
4 这个过程RVO负责直接优化到堆上吗?我问这个问题是因为我需要把PoleAccess::
Load返回的每一个Pole对象... 阅读全帖 |
|
发帖数: 1 | 25
那你也只能这么做了,麻烦的就是ownership自己维护。
另外其实new一个vector看着也别扭,如果你用c++17的话,可以考虑把返回值改成std: |
|
y**b 发帖数: 10166 | 26 std::size_t a=1, b=2;
a-b会得到无符号数的模-1,是个巨大无比的正数,
这类东西要是放在科学计算里面,
完全就是坑啊:
本来用size_t取代int定义一些自然条件和大数值更合理,
可是一旦两个size_t相减,控制条件就飞到九霄云外了,
等你费尽力气调试程序,却发现原来是这么一个荒谬的玩意。
多年前我就遇到过一次。 |
|
L****8 发帖数: 3938 | 27 看了一下 std::size_t 大致相当于 unsigned long long
我现在是自定义 int_max = long long
彻底不用 unsigned |
|
d***a 发帖数: 13752 | 28 “难道就没有什么好办法?还有C++为什么不对a-b这种情况给予编译警告?”
这是C语言的问题,C++继承过来了。a-b越界是run-time出现的,编译器不能警告(除
非a-b是编译时可计算的常数表达式)。
效率高的解决方法有,可以写汇编语言,在每次a-b后检查CPU的carry flag,比用std:
:max快。但从编程效率来说,这不是什么好办法。
用int或unsigned int,从机器语言来说是一样的结果。比如说1-2,实际上是
0x00000001-0x00000002 = 0xFFFFFFFF,0xFFFFFFFF解释成int就是-1。
+ |
|
ab 发帖数: 37 | 29 I'm using gnu gcc.
But I found that no g++ std lib on line help!
Where can I got it?
Thank you |
|
s*****r 发帖数: 59 | 30 there is statistics variable, which is mean/std, what name of it? the higher
the better or the lower the better? Thanks. |
|