我想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只是不能使用队列?
通常的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) 我有一个非常基本的问题,但我不确定我是否理解这个概念.假设我们有:
int a = 1000000;
int b = 1000000;
long long c = a * b;
Run Code Online (Sandbox Code Playgroud)
当我运行此,c显示负值,所以我改变也a和b到long long,然后一切都很好.那么,为什么我必须改变a和b,当其值在范围int和他们的产品被分配到c(这是long long)?
我正在使用C/C++
我的工作场所有一个linux系统,包含很旧的包,没有root权限.我正在从源代码编译我需要的包--prefix=[somewhere in homedir].我的问题是我无法找到如何说服configure在特定目录中查找头文件.来源是cpp.我试过与环境变量有关g++并查找标志和谷歌搜索,但我没有成功.有人可以帮我解决这个问题吗?
我习惯于在函数指针中看到这样的语法
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中,核心语言增强功能支持它.是否已扩展模板参数类型以适应可调用性?
我有许多具有不同签名的回调函数.理想情况下,我想将它们放在一个向量中,并根据某些条件调用适当的一个.
例如
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 ++ 11中,我使用它std::next是因为如果要更改vector为list,则不必更改其余代码。
对于list,std::next为O(n),因为我需要遍历所有元素。但是,这如何vector呢?我在cppreference上发现了这个注释:
但是,如果满足
InputIt或ForwardIt额外满足LegacyRandomAccessIterator的要求,则复杂度是恒定的。
是否vector符合这些要求?以及为什么“传统”?
所有.
我想链接一个调用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()......是定制的实现.一些是内联函数,一些是库函数.
如果您有以下内容:
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以及某些有用的实例,我将非常感激.
我有一个游戏,某些游戏对象一次性产生,然后在它们被摧毁/杀死时消失.游戏对象是一个元素std::vector,我想最小化内存使用.我习惯了交换技巧,
std::vector<gameObject>(gameObjectVector.begin(), gameObjectVector.end()).swap(gameObjectVector);
Run Code Online (Sandbox Code Playgroud)
但我注意到了shrink_to_fit()C++ 11 的内置版本.但是,它具有线性复杂性,而交换技巧是不变的.交换技巧在各方面都不是优越的吗?