小编Set*_*gie的帖子

将文本拟合为固定大小的div

我有一个固定的大小div,我需要填写文本.我只需要填充尽可能多的文本,我需要知道字符串中的偏移量.

现在我正在通过保存div当前高度然后将高度设置divauto,将字符串越来越长的子串放入其中div,并在div高度大于原始高度时停止.这有效,但效率很低.

有没有更好的方法来做到这一点?而且更好,我的意思是更快.

html javascript css string fill

3
推荐指数
1
解决办法
2745
查看次数

在替换正则表达式中添加一个匹配的数字

我有一个充满C++代码的文件,它是一堆返回数字的小函数.如果数字大于2,我试图用数字加一个替换每个数字.所以,

int blah() { return 5; }
Run Code Online (Sandbox Code Playgroud)

会成为

int blah() { return 6; }
Run Code Online (Sandbox Code Playgroud)

int blah() { return 1; }
Run Code Online (Sandbox Code Playgroud)

会保持不变.

这是怎么做到的?

c++ regex perl addition substitution

2
推荐指数
1
解决办法
1565
查看次数

你能/你如何重新分配使用placement new创建的C++对象?

我有一个C++对象,它是由宿主应用程序提供的内存缓冲区中的插件创建的,其中placement new运算符的方式类似于以下代码:

MyClass* createObject(void* inNewBlock)
{
  MyClass* elementAddr = static_cast<MyClass*>(inNewBlock);
  new (elementAddr) MyClass(); // Placement new into pre-allocated memory
}
Run Code Online (Sandbox Code Playgroud)

我知道我无法删除以这种方式创建的对象,但是我想知道是否有办法将内存清空并在以后重新分配对象,如果我需要这样:

void removeObject(MyClass* object)
  memset(object, NULL, sizeof(MyClass));
}

void restoreObject(MyClass* object)
{
  new (object) MyClass(); // Placement new into pre-allocated memory
}
Run Code Online (Sandbox Code Playgroud)

上面的代码不起作用.我试过了,当我打电话时,主机应用程序挂起或崩溃restoreObject().我希望有人可以向我解释为什么这不起作用以及可能的替代方案.

c++ memory-management

2
推荐指数
1
解决办法
495
查看次数

如何返回指向多维数组的指针?

我在C++中有一个模板类,如下所示:

template <typename T, int xMax, int yMax, int zMax>
class Volume {
public:
    T*[64][64] getDataPointer() {return data;} //compiler doesn't like this line
private:
    T data[xMax][yMax][zMax];
};

typedef Volume<unsigned char, 64, 64, 64> Chunk;
Run Code Online (Sandbox Code Playgroud)

编译器不喜欢getDataPointer()的返回.我想返回我用来传递给这个函数的相同类型:

void perlin2D(unsigned char (*chunk)[64][64])
Run Code Online (Sandbox Code Playgroud)

有人可以告诉我该怎么做吗?

c++ pointers

2
推荐指数
1
解决办法
137
查看次数

关键部分和单例模式

背景:在函数中使用局部静态变量作为单例模式的实现的一个问题是,如果多个线程同时第一次调用该函数,则可以完成静态变量的初始化两次.

我的问题是,如果你将静态变量的初始化包含在一个关键部分中,是否会阻止双重初始化的发生?例:

CRITICAL_SECTION cs;

Class get_class_instance() {
    EnterCriticalSection(&cs);

    // is the initialisation of c done inside the critical section?
    static Class c = Class(data);

    LeaveCriticalSection(&cs);

    return c;
}
Run Code Online (Sandbox Code Playgroud)

或者是初始化是否神奇地完成(不是在声明/初始化时),比如在构造函数开始之前初始化变量成员?

我的问题是关于pre-C++ 11,因为根据Xeo的回答,C++ 11自己解决了这个问题.

c++ singleton multithreading critical-section c++03

2
推荐指数
1
解决办法
3540
查看次数

c ++对指针的引用

我有以下伪代码:

function1()//Gets called on startup
{
    myclass* obj;
    function2(obj);
    obj->doSomething();//crashes here!
}

function2(myclass*& ret)
{
    myclass* nobj = &myclass();
    nobj->doSomething();//Does not crash
    ret = &nobj;
}
Run Code Online (Sandbox Code Playgroud)

看起来即使我设置ret指向nobj,当我尝试操作obj(应该指向nobj,因为ret是对obj的引用)时,我的程序崩溃了!显然,我做错了什么,有谁知道它是什么?

c++ crash gdi+ pointers reference

2
推荐指数
1
解决办法
3357
查看次数

因子程序c使用带有while循环的C中的递归函数

使用while循环在c中使用递归的因子程序.在该程序中,一旦执行到达函数return语句,它就不会返回到函数调用.相反,它重复执行该功能.任何人都可以告诉我这个程序有什么问题.

#include<stdio.h>    
int fact(int n)
{    
    int x=1;    

    while(n>1)    
    {    
        x=n*fact(n-1);    
    }    

    return(x);    
}    

void main()    
{    
    int n,fact1;    
    scanf("%d",&n);    
    fact1=fact(n);    
    printf("%d",fact1);    
}
Run Code Online (Sandbox Code Playgroud)

c recursion factorial

2
推荐指数
2
解决办法
6万
查看次数

局部变量引用其他局部变量是危险的吗?

以这两个类为例:

struct Owned {
    Owned() : i() { }

    void print() { cout << ++i << endl; }

    int i;
};

struct Owner {
    Owner(Owned& o) : o(o) { }

    Owned& o;

    ~Owner() { o.print(); }
};
Run Code Online (Sandbox Code Playgroud)

以这种方式使用它们是危险的吗?

int main() {
    Owned owned;
    Owner owner(owned);
}
Run Code Online (Sandbox Code Playgroud)

似乎,根据它们被破坏的顺序,这可能导致析构owner函数在被破坏的函数上调用函数owned.是否定义了局部变量的破坏顺序,以及如何使两个实例相互引用的情况?

请原谅我,如果这是常识,我在任何地方都没有读过任何关于它的信息.

c++ destructor reference

2
推荐指数
1
解决办法
123
查看次数

从variadic模板创建std :: array

我想实现这样的目标:

#include <string>
#include <array>

enum class MyEnum{
  A,
  B,
  C
};

template<MyEnum... Args>   
class MyClass{
  public:
    MyClass()
    {
    }
  private:
    std::array<MyEnum, sizeof...(Args)> array;   
};
Run Code Online (Sandbox Code Playgroud)

现在我有一个数组,可以保存所有传递给模板值的数组.但是如何使用模板参数填充此数组?

c++ templates variadic-templates c++11

2
推荐指数
1
解决办法
3037
查看次数

while 循环在请求输入之前生成 printf 两次?

由于某种原因,这个 while 循环执行了两次,并且在提示输入之前字符串被打印了两次。我原以为输入缓冲区中有一个字符,但据我所知,情况并非如此。有什么建议吗?

while (count >= 0 && stop != 83 && isClosed == 0) {
     printf("Percentage of Door Closed: %d\n",count);
     count -= 10;
     printf("If sensor detects object press 'S'\n");
     printf("Press any button to continue closing door\n");
     stop = getchar();
     if (count == 0) {
        isClosed=1;
     }
}
Run Code Online (Sandbox Code Playgroud)

输出:

Percentage of Door Closed: 100
If sensor detects object press 'S'
Press any button to continue closing door
Percentage of Door Closed: 90
If sensor detects object press 'S'
Press any …
Run Code Online (Sandbox Code Playgroud)

c execution while-loop

1
推荐指数
1
解决办法
1万
查看次数