小编眠りネ*_*ネロク的帖子

使用std :: copy插入STL队列

我想std::copy用于将元素插入到队列中,如下所示:

vector<int> v;
v.push_back( 1 );
v.push_back( 2 );

queue<int> q;

copy( v.begin(), v.end(), insert_iterator< queue<int> >( q, q.front() ) );
Run Code Online (Sandbox Code Playgroud)

但这无法编译,抱怨begin不是其中的一员std::queue.

注意:我也试过std::inserter了 - 这也失败了,这次说'reference'不是'std :: queue'的成员. std::back_inserter并且std::back_insert_iterator还失败,相同的错误.

我错过了一些明显的东西,还是insert_iterator只是不能使用队列?

c++ queue stl copy insert-iterator

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

std :: copy如何与流迭代器一起使用

通常的STL结构是:

vector<string> col;
copy(istream_iterator<string>(cin), istream_iterator<string>(),
    back_inserter(col));
Run Code Online (Sandbox Code Playgroud)

我们使用an istream_iterator从std input(cin)复制到向量.

谁能解释一下这段代码的工作原理

我的问题是我真的不明白这一部分:

istream_iterator<string>(cin), istream_iterator<string>()
Run Code Online (Sandbox Code Playgroud)

c++ iterator stl stream

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

C++中两个整数的乘法

我有一个非常基本的问题,但我不确定我是否理解这个概念.假设我们有:

int a = 1000000;
int b = 1000000;
long long c = a * b;
Run Code Online (Sandbox Code Playgroud)

当我运行此,c显示负值,所以我改变也ablong long,然后一切都很好.那么,为什么我必须改变ab,当其值在范围int和他们的产品被分配到c(这是long long)?

我正在使用C/C++

c++ int range long-integer

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

如何为configure脚本指定include目录

我的工作场所有一个linux系统,包含很旧的包,没有root权限.我正在从源代码编译我需要的包--prefix=[somewhere in homedir].我的问题是我无法找到如何说服configure在特定目录中查找头文件.来源是cpp.我试过与环境变量有关g++并查找标志和谷歌搜索,但我没有成功.有人可以帮我解决这个问题吗?

c++ linux configuration

15
推荐指数
4
解决办法
3万
查看次数

带有函数类型参数的C++模板的语法

我习惯于在函数指针中看到这样的语法

int (*pointer_name) (float, char *);
void call_function (void (*)(int), int);
Run Code Online (Sandbox Code Playgroud)

在一些C++ 03函数库中,我看到以这种方式使用的类型:

abc::function<void(*)(int,float)> f;
Run Code Online (Sandbox Code Playgroud)

在C++ 11中,std::function我看到了这种方式给出的类型

std::function<void(int,float)> f;
Run Code Online (Sandbox Code Playgroud)

有一个失踪(*).为什么?

在C++ 03 function<T>已经T是相同的类型到相应的函数指针.很容易想象实现.

std::function在C++ 11中,核心语言增强功能支持它.是否已扩展模板参数类型以适应可调用性?

c++ templates c++11 std-function

15
推荐指数
3
解决办法
3360
查看次数

矢量std ::功能与不同的签名

我有许多具有不同签名的回调函数.理想情况下,我想将它们放在一个向量中,并根据某些条件调用适当的一个.

例如

void func1(const std::string& value);

void func2(const std::string& value, int min, int max);

const std::vector<std::function<void(std::string)>> functions
{
    func1,
    func2,
};
Run Code Online (Sandbox Code Playgroud)

我意识到上述情况是不可能的,但我想知道是否有任何我应该考虑的替代方案.我还没有找到任何东西,我已经尝试过,std::bind但没有成功实现我想要的东西.

这样的事情可能吗?

c++ stdvector c++11 std-function

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

向量O(n)或O(1)是std :: next吗?

在C ++ 11中,我使用它std::next是因为如果要更改vectorlist,则不必更改其余代码。

对于liststd::next为O(n),因为我需要遍历所有元素。但是,这如何vector呢?我cppreference发现了这个注释

但是,如果满足InputItForwardIt额外满足LegacyRandomAccessIterator的要求,则复杂度是恒定的。

是否vector符合这些要求?以及为什么“传统”?

c++

14
推荐指数
2
解决办法
1970
查看次数

在C中,是否可以将导出的函数名称更改为不同的名称?

所有.

我想链接一个调用malloc()函数的库.但是,我的目标环境是不同的,并 malloc()作为内联函数提供.

如何将库的调用malloc()指向我的目标环境的malloc()例程?

是否可以更改导出的函数名称?如果是这样,我可以my_malloc()先编码并将其导出为malloc()并将库链接到该库:

#include <my_environment.h>  // malloc() is inline function declared there 
void my_malloc (void) {
   malloc (void);             
}
Run Code Online (Sandbox Code Playgroud)

更具体地说,该库是来自linux发行版的库,因此它依赖于libc.但我的环境嵌入了一个,没有libc库和malloc(),free()......是定制的实现.一些是内联函数,一些是库函数.

c linker inline static-linking

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

dynamic_cast如何工作?

如果您有以下内容:

class Animal{};

class Bird : public Animal{};

class Dog : public Animal{};

class Penguin : public Bird{};

class Poodle : public Dog{};
Run Code Online (Sandbox Code Playgroud)

dynamic_cast只检查一个类是否是另一个类的派生类,或者一个类是否是另一个类的基类?所以,如果我有:

Bird* bird;
Animal* animal;

bird = dynamic_cast<Animal*>(bird);
animal = dynamic_cast<Bird*>(animal);
Run Code Online (Sandbox Code Playgroud)

bird现在指向一个Animal类,以便我可以使用bird->some_function();它将调用该函数Animal?而animal现在指向一Bird类,所以我可以做animal->some_function();,它会调用some_function();Bird

我一直试图弄清楚dynamic_cast我在网上找到的作品和资源是如何最有帮助的.如果有人能够提供其它功能的其他见解dynamic_cast以及某些有用的实例,我将非常感激.

c++ dynamic-cast dynamic

13
推荐指数
3
解决办法
8466
查看次数

shrink_to_fit()vs swap技巧

我有一个游戏,某些游戏对象一次性产生,然后在它们被摧毁/杀死时消失.游戏对象是一个元素std::vector,我想最小化内存使用.我习惯了交换技巧,

std::vector<gameObject>(gameObjectVector.begin(), gameObjectVector.end()).swap(gameObjectVector);
Run Code Online (Sandbox Code Playgroud)

但我注意到了shrink_to_fit()C++ 11 的内置版本.但是,它具有线性复杂性,而交换技巧是不变的.交换技巧在各方面都不是优越的吗?

c++ big-o vector time-complexity c++11

13
推荐指数
2
解决办法
2137
查看次数