小编Mer*_*rni的帖子

没有模板的分配器

每个 stl 容器都采用一个分配器作为参数:

template < class T, class Allocator = allocator<T> > class vector;
Run Code Online (Sandbox Code Playgroud)

如果您编写自己的类,则可以使用自己的分配器。但是是否可以在不使用模板的情况下编写自己的分配器?

例如,如果不允许使用模板,则编写此函数并不容易

 pointer allocate(size_type n, const_pointer = 0) {
    void* p = std::malloc(n * sizeof(T));
    if (!p)
      throw std::bad_alloc();
    return static_cast<pointer>(p);
  }
Run Code Online (Sandbox Code Playgroud)

因为你怎么知道 T 的大小呢?

c++ templates memory-management

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

设计在C++中的容器中一起使用所有子类

我刚读了一篇关于奇怪的重复模板模式的文章.您可以使用它模拟模板的虚拟功能.

例如:

template<class T>
struct A
{
    void func() { static_cast<T*>(this)->func(); }
};

struct B : public A<B>
{
    void func() { cout << "B" << endl; }
};`
Run Code Online (Sandbox Code Playgroud)

但是,如果我们有来自A的许多子类并希望将它们全部放在向量中,例如,vector<A*>当您使用模板时,这是不可能的,并且您必须在基类中使用普通的多态与虚函数.

解决这个问题的设计建议是什么?因为我想使用模板,但也能够在容器中一起使用所有子类.

c++ templates

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

C#是对象有效的

您可以检查对象是否为null,但是您可以检查对象是否有效吗?

Assert.IsValid(object_name);
Run Code Online (Sandbox Code Playgroud)

例如,垃圾收集器已删除该对象,或者某人已对其进行了处置.但指针仍然指向该对象.

c# pointers

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

cpp文件中的全局变量

我在匿名命名空间中有一个全局变量.

namespace {
std::unordered_map<std::string, std::string> m;
}


A::A() { m.insert(make_pair("1", "2")); } // crasches
void A::insert() { m.insert(make_pair("1", "2")); } // ok
Run Code Online (Sandbox Code Playgroud)

如果尝试使用map构造函数内部,我会获得Access违规读取位置.但如果我A在初始化之后使用它就可以了.
这种行为是否正确?

c++ access-violation c++11

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

从vector c ++中查找字符串中的字符/字符串

我有一个字符串向量,我想要计算向量中的所有'Ace'.现在我只能找到一个......

int main()
{
    std::vector<string> vec;
    vec.push_back("Ace of Spades");
    vec.push_back("Ace");
    string value = "Ace";
    int cnt = 0;
    auto iter = find_if(begin(vec), end(vec), [&](const string &str)
    {
        return str.find(value) != str.npos;
    });
    if(iter == end(vec))
        cout << "no found" << endl;
    else 
    {
        cout << *iter << endl;
        cnt++;
        cout << cnt++ << endl;
    }
}
Run Code Online (Sandbox Code Playgroud)

c++ find c++11

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

在Vulkan/Opengl的视口外绘图

我有viewport一半是screen size/framebuffer.

x,y,w,h = 0,0,512,512

我的scissor地区已经满了framebuffer

x,y,w,h = 0,0,0 1024,512

viewport从左到右画了一条远在外面的线.我期待只在视口内绘制线条.我已经在三张不同的显卡上测试了这个,其中两张,我得到了我期待的结果.然而,在第三个线上,线被绘制viewportscissor区域外,但在区域内.哪一个结果在这里是正确的?据我所知,线的两个顶点应移动到外部viewport位置.不应该在它之外画出来.

如果您10在本网站上阅读了陷阱:https: //www.opengl.org/archives/resources/features/KilgardTechniques/oglpitfall/

他们正在讨论在外面绘图viewport,但这只是一些特殊情况,例如你有一条很粗的线,我的线宽是1

opengl viewport vulkan

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

在Python中,"返回迭代器"是什么意思?

我在Python中使用networkx作为图形方法和各种实用程序的功能接口.我想在图表中创建一个包含节点所有邻居的列表.

该网页声明all_neighbors(图形,节点)返回迭代器.那是什么意思?如何在列表中保存邻居?

http://networkx.github.io/documentation/latest/reference/generated/networkx.classes.function.all_neighbors.html#networkx.classes.function.all_neighbors

python iterator networkx

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

哪个在C++中成本最高,删除最后一个元素或调整向量的大小?

哪个操作在C++中成本最高?
1.调整向量的大小(将大小减小1)
2.删除向量中的最后一个元素

c++ resize vector c++11

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

改变谷歌sql云中的区域

我目前的Google SQL云区域现在位于美国.我想将该地区改为欧洲.

我的实例id是:thermal-works-573:dicealpha

google-cloud-sql

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

检查std :: vector的大小是否为零

在vs2010 std :: vector.size()中:

return (this->_Mylast - this->_Myfirst);
Run Code Online (Sandbox Code Playgroud)

和std :: vector.empty():

return (this->_Myfirst == this->_Mylast);
Run Code Online (Sandbox Code Playgroud)

我的问题是,如果你要检查一个向量是否有零元素,这两个函数之间是否有任何不同的速度.减去和相等几乎是相同的二进制操作,所以这两个函数的速度是一样的吗?

c++ stl visual-studio-2010

0
推荐指数
3
解决办法
4368
查看次数

addAll(Collection)..不适用于参数(Iterable)

我创建了一个HashSet类,它在Java中扩展了HashSet.如果我只添加一个元素,代码就可以了.但是当我使用addAll时,它表明以下内容:

The method addAll(Collection<? extends Number>) in the type MyHashSet<Number> is not applicable for the arguments (Iterable<Integer>)
Run Code Online (Sandbox Code Playgroud)

是什么原因,我怎么能绕过它呢?

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.HashSet;

public class MyHashSet<E> extends HashSet<E> {
private int count;
public int Count() { 
    return count;
}

@Override public boolean add(E e) {
    count++;
    return super.add(e);    
}

@Override public boolean addAll(Collection<? extends E> c) {
    count += c.size();
    return super.addAll(c);
}

public static void main(String[] args) {
    MyHashSet<Number> hs = new MyHashSet<>();
    hs.add(new Integer(1));
    Iterable<Integer> …
Run Code Online (Sandbox Code Playgroud)

java generics overriding hashmap

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

如何在 winapi 中实现双缓冲?

我无法阻止闪烁。我得到了添加双缓冲的建议。我怎么做?

#include <iostream>
#include <windows.h>
#include <string>
#include <fstream>
#include <vector>

using namespace std;

namespace {
    const int ID_NEW = 1;
    const int ID_QUIT = 2;
    const int ID_ABOUT = 3;
    const int NORTH_BUTTON_ID = 4;
    const int SOUTH_BUTTON_ID = 5;
    const int WEST_BUTTON_ID = 6;
    const int EAST_BUTTON_ID = 7;
    const int ID_FINISHED_GAME = 8;
    int x = 0;
    int y = 0;
    int xStart = 0;
    int yStart = 0;
    int windowHeight = 400;
    int windowWidth = 500; …
Run Code Online (Sandbox Code Playgroud)

winapi double-buffering

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

为什么Java中存在非泛型二进制搜索版本?

为什么Java中存在非泛型二进制搜索版本?

是因为他们不想让现有的实施崩溃吗?

java generics binary-search

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