我知道,我可以像这样初始化数据.
int array[3] = { 1, 2, 3 };
Run Code Online (Sandbox Code Playgroud)
甚至
int array[2][2] = { {1, 2}, {3, 4} };
Run Code Online (Sandbox Code Playgroud)
我也可以这样做 std::vector
std::vector<int> A = { 1, 2, 3 };
Run Code Online (Sandbox Code Playgroud)
假设我想写自己的课程:
class my_class
{
std::vector< int > A;
public:
//pseudo code
my_class(*x) { store x in A;} //with x={ {1, 2}, {3, 4} }
// do something
};
Run Code Online (Sandbox Code Playgroud)
是否可以编写这样的构造函数,它是如何可能的?这是什么声明
{{1, 2}, {3, 4}} 实际上在做.
我总是发现,你可以用这种方式初始化数据,但绝不是它正在做的事情.
我想使用 std::transform 做一些类似于 binary_op 的事情,但有一个附加常量,例如,获得两个向量的乘积: x1 = (10,20,30,40,50) 和 x2 = (2, 4,6,8,10),我们可以写:
#include <iostream>
#include <algorithm>
#include <vector>
double multiply(double x, double y){
return x*y;
}
int main () {
std::vector<int> x1;
std::vector<int> x2;
for (int i=1; i<6; i++)
x1.push_back (i*10); //10,20,30,40,50
for (int i=1; i<6; i++)
x2.push_back (i*2); //2,4,6,8,10
std::transform (x1.begin(), x1.end(), x2.begin(), x1.begin(),multiply);
for (std::vector<int>::iterator it=x1.begin(); it!=x1.end(); ++it)
std::cout << ' ' << *it;
//output: 20,80,180,320,500
return 0;
}
Run Code Online (Sandbox Code Playgroud)
上面的代码将 x1 和 x2 按元素相乘并返回 (20,80,180,320,500)。
但是,如果我想计算 x1 …
#include <bits/stdc++.h>
std::unordered_map<std::pair<int,int>, int> mp;
int main()
{
mp[make_pair(1, 2)]++;
}
Run Code Online (Sandbox Code Playgroud)
使用时[] operator,我得到了这个
error: no match for ‘operator[]’ (operand types are ‘std::unordered_map<std::pair<int, int>, int>’ and ‘std::pair<int, int>’)
Run Code Online (Sandbox Code Playgroud)
但是,当用 做同样的事情时std::map,不会发生错误。为什么?
我怎样才能让它工作std::unorderd_m?
我想编写一个带有一个参数的C++函数,以便可以传入以下任何一种类型:
std::vector<int>
std::array<int>
int array[numElements]
int *ptr = new int[numElements]
etc
Run Code Online (Sandbox Code Playgroud)
模板是实现这一目标的最佳方式吗?
我想先制作一个没有大小(vector<int> times)的向量,然后再在类()的构造函数中定义其大小times(size)。
我可以通过使用初始化器列表来做到这一点,如下所示
class A (int size): times(size) {};
Run Code Online (Sandbox Code Playgroud)
但是我的问题是,为什么不能在类似于以下代码的类的构造函数中执行此操作?
我的意思是为什么下面的代码是错误的?
class A
{
public:
A(int size);
private:
std::vector<int> line;
};
A::A(int size)
{
line(size);// here I got the error
}
Run Code Online (Sandbox Code Playgroud)
line(size) 犯错误
请问#ifdef _DEBUG在主要功能有任何意义,如果我在工作的Visual Studio 2013?
如果是,那是为了什么?
int _tmain(int argc, _TCHAR* argv[])
{
#ifdef _DEBUG
//creating some objects, using functions etc;
#endif
}
Run Code Online (Sandbox Code Playgroud) 我的目标是尝试解决这个问题:从 end 中删除向量中的所有空元素。使用擦除删除成语。
这个想法是在给定std::vector<std::string>的字符串a中删除从末尾开始的所有元素,这些元素是空的(等于空白)。当发现非空元素时,应停止删除元素。
例子:
vec = { " ", "B", " ", "D", "E", " ", " ", " " };
Run Code Online (Sandbox Code Playgroud)
移除后:
vec = { " ", "B", " ", "D", "E"};
Run Code Online (Sandbox Code Playgroud)
这是我尝试的解决方案:
#include <iostream>
#include <string>
#include <algorithm>
#include <vector>
#include <iterator>
int main()
{
std::vector<std::string> vec = { " ", "B", " ", "D", "E", " ", " ", " " };
bool notStop = true;
auto removeSpaceFromLast = [&](const std::string& …Run Code Online (Sandbox Code Playgroud) template<typename T>
T get(const string &prompt)
{
cout<<prompt;
T ret;
cin>>ret;
return ret;
}
Run Code Online (Sandbox Code Playgroud)
我不知道如何通过重载来做到这一点; 基本上,这适用于任何类型的数据,对......
我尝试了typeid(variable).name();并获得了一个字符串变量的输出,并尝试在get函数中创建一个if.但它没有用.
有没有一种方法可以确定一个对象在堆上是否至少有一个成员?
我试图能够将像std::stringor std::vectoror这样的对象std::list(是的,主要是容器)与所有其他类型区分开来(不幸的是,即使是具有单个元素的容器也在我的“感兴趣范围”内)
我正在尝试做类似以下的事情:
struct foo
{
private:
int * _ptr;
public:
foo() : _ptr(new int) {};
~foo() { delete _ptr; };
};
struct bar
{
private:
int val;
};
template <typename T>
void func(T val)
{
if constexpr (std::is_class_v<T>)
{
std::cout << std::setw(20) << typeid(T).name() << " is a class type." << std::endl;
if (/* determine if foo has any heap allocations */)
{
// Do something #1.
std::cout << std::setw(20) << typeid(T).name() << …Run Code Online (Sandbox Code Playgroud) 以下代码因此错误而失败
E0413不存在从“ lambda [] float(int i)-> float”到“ float(*)(int i)”的合适转换函数
int test;
float (*f)(int i) = [&](int i) -> float {return test; };
Run Code Online (Sandbox Code Playgroud)
我该如何解决?我需要Capture子句。