小编JeJ*_*eJo的帖子

将成员从向量 <Class> 复制到向量 <Member_Type> 的最佳方法

我有一个复杂结构的向量(此处std::pair<int, int>)。我现在想将一个成员(比如说std::pair::first)复制到一个新的向量中。有没有比这更好(更惯用)的方法

std::vector<std::pair<int, int>> list = {{1,2},{2,4},{3,6}};

std::vector<int> x_values;
x_values.reserve(list.size());
for( auto const& elem : list )
{
    x_values.emplace_back(elem.first);
}
Run Code Online (Sandbox Code Playgroud)

c++ algorithm copy std stdvector

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

为什么我需要默认求和函数来实现可变参数模板求和?

我想计算提供给 function 的任意数量的参数的总和sum。假设给予函数的整数将满足operator+.

如果我注释掉该函数sum()(没有参数的函数),则代码无法编译。如果我取消注释,代码会编译并运行,但永远不会命中 function sum()

我似乎无法理解为什么我们需要有sum()功能,因为我正在使用条件sizeof...(Args)

如果有人能帮助我理解这一点,我会非常感激吗?

/*
int sum() 
{
    std::cout << "Sum with 0 Args" << std::endl;
    return 0;
}
*/

template <typename T, typename...Args>
T sum(T first, Args...args) 
{
    // std::cout << sizeof...(Args) << std::endl;
    if (sizeof...(Args) != 0) 
    {
        return first + sum(args...);
    }
    else 
    {
        std::cout << "Found 0 args" << std::endl;
        return first;
    }
}

int main()
{
    std::cout << sum(1, 2, 3) …
Run Code Online (Sandbox Code Playgroud)

c++ templates function-templates variadic-templates c++14

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

glTranslatef()方法的目的是什么?

我是openGl的初学者.你能告诉我一下吗?

glTranslatef();  
glScalef();
glBegin ();
Run Code Online (Sandbox Code Playgroud)

我在谷歌搜索过它们但无法得到答案.

谢谢

opengl

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

用C++反转数组

请检查我的代码反转数组,我找不到错误.它在函数调用之前和之后显示相同的数组,我不知道为什么?

#include <iostream>
using namespace std;

void reverseArray(int *arr, int size)
{
    int *Copy_arr = new int[size];
    int temp;
    for (int i = 0; i < size; i++)
    {
        Copy_arr[i] = arr[i];
    }

    for (int i = 0; i < size; i++)
    {
        temp = arr[i];
        arr[i] = arr[(size - 1) - i];
        arr[(size - 1) - i] = temp;
    }

    cout << "Array before function call was: ";
    for (int i = 0; i < size; i++)
    {
        cout …
Run Code Online (Sandbox Code Playgroud)

c++ algorithm

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

填充子类的基类向量不起作用

我正在尝试使用具有相同基类的不同子类指针的向量。该向量设置为基类指针,但是添加到该向量的任何内容都无法获得其子类的全部功能。在错误日志中可以看到,它被视为基类,因此未获得扩展功能。

我查看了很多问题,人们说要按照我的方式去做,但是由于某种原因,它没有用。

该代码位于公共仓库中:

https://repl.it/@cubingminer8/inheritance-with-vectors-testing

任何帮助将不胜感激!

编辑:确定,所以我将在c ++ sdl2游戏引擎中将其用于子画面组系统。将有一个基本的Sprite类,其中包含一些基本的东西,例如render和move,而我需要的任何sprite都是它们自己的继承自Sprite的类,它们将具有自己的独特行为,因此虚函数是不切实际的。将有一个sprite组对象,可以将继承自Sprite的对象存储在其中。这样就可以一次全部渲染它们。

如果您曾经使用过pygame,那么它几乎与那里使用的sprite和spritegroup系统相同。 https://www.pygame.org/docs/tut/SpriteIntro.html

#include <iostream>
#include <vector>

class Base {
public:
    char A = 'A';
};

class Sub : public Base {
public:
    char B = 'B';
};

class Sub2 : public Base {
public:
    char C = 'C';
};

int main() {
    std::vector<Base*> List;
    List.push_back(new Sub());
    List.push_back(new Sub2());

    std::cout << List[0]->B << std::endl; // it should be able to print B
    std::cout << List[1]->C << std::endl; // but it is …
Run Code Online (Sandbox Code Playgroud)

c++ polymorphism inheritance class stdvector

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

为什么这些结果表明不需要在向量中使用保留?

我编写了以下代码,以测量1000k不使用保留和保留的情况下推回整数时间所花费的时间。结果不是我想要的。

所有测试均在我的Samsung ativtap7上执行,该处理器具有在Windows 10下运行的核心i5 @ 1.8 Ghz处理器,4 GB RAM和VS2018 C ++编译器。

#include <iostream>
#include <vector>
#include "Stopwatch.h"
using namespace std;

int main()
{
    Stopwatch myWatch;
    //pushback 1000k times without reserve
    for (int i = 0; i < 10; i++)
    {
        cout << "try " << i + 1 << endl;
        myWatch.Start();
        vector<int> vec1;
        for (int i = 0; i < 1000000; i++)
        {
            vec1.push_back(i);
        }
        myWatch.End();
        myWatch.LookElapsedTime();

        //pushback 1000k times with reserve
        myWatch.Start();
        vector<int> vec2(1000000);
        for (int i …
Run Code Online (Sandbox Code Playgroud)

c++ performance stdvector c++11

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

如何在C ++ 17中将“ else-if”与初始化程序一起使用?

cpp参考https : //en.cppreference.com/w/cpp/language/if,看来我不能做到这一点:

if (cond)
{}
else if (init; cond)  // <<--- init not allowed with "else if"
{}
Run Code Online (Sandbox Code Playgroud)

我以一种相当愚蠢的方式解决了它:

if (cond)
{}
else if ([]() -> bool
{
    init;
    if (cond)
    {
        // Do something in the same scope as 'init'
        return true;
    }
    return false;
}())
{}
Run Code Online (Sandbox Code Playgroud)

我是否在这里缺少有关使用C ++ 17“正确”执行此操作的明显方法?

c++ lambda if-statement c++17

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