我有一个复杂结构的向量(此处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) 我想计算提供给 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) 我是openGl的初学者.你能告诉我一下吗?
glTranslatef();
glScalef();
glBegin ();
Run Code Online (Sandbox Code Playgroud)
我在谷歌搜索过它们但无法得到答案.
谢谢
请检查我的代码反转数组,我找不到错误.它在函数调用之前和之后显示相同的数组,我不知道为什么?
#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) 我正在尝试使用具有相同基类的不同子类指针的向量。该向量设置为基类指针,但是添加到该向量的任何内容都无法获得其子类的全部功能。在错误日志中可以看到,它被视为基类,因此未获得扩展功能。
我查看了很多问题,人们说要按照我的方式去做,但是由于某种原因,它没有用。
该代码位于公共仓库中:
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) 我编写了以下代码,以测量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) 从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++ ×6
stdvector ×3
algorithm ×2
c++11 ×1
c++14 ×1
c++17 ×1
class ×1
copy ×1
if-statement ×1
inheritance ×1
lambda ×1
opengl ×1
performance ×1
polymorphism ×1
std ×1
templates ×1