标签: stdinitializerlist

为什么不能将 std::pair 与 std::initiliazer_list 进行比较

因为std::pair,我只是想知道为什么会这样

std::pair<int, int> response = {1, 2}
Run Code Online (Sandbox Code Playgroud)

而,这不会:

if (response == {1, 2}) do something;
Run Code Online (Sandbox Code Playgroud)

是不是因为运算符=为 std::pair 重载而==不是?

c++ std-pair c++14 stdinitializerlist

5
推荐指数
0
解决办法
105
查看次数

在初始化std :: array时,通过std :: initializer_list初始化std :: pair不起作用?

我想初始化std::arraystd::pair通过std::initializer_list.

pair<int, int> p = {3,4};//ok
array<pair<char,char>, 3> p = { make_pair('{','}'), make_pair('[',']'), make_pair('(',')') };//ok
array<pair<char,char>, 3> p = { {'{','}'}, {'[',']'}, {'(',')'} };//not ok
Run Code Online (Sandbox Code Playgroud)

为什么我的第三个选项不起作用?此外,这也很好:

vector<pair<char, char>> brackets = { {'{','}'}, {'[',']'}, {'(',')'} };
Run Code Online (Sandbox Code Playgroud)

c++ std-pair stdarray c++14 stdinitializerlist

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

这个 C++ 函数如何返回两个值?

请解释此函数如何返回两个值。它采用一个数组并从数组中返回总和等于目标总和的两个数字。

class Solution {
public:
vector<int> twoSum(vector<int>& nums, int target) {
    int a = 0;
    int b = 0;
    for (int i=0; i<nums.size()-1; i++)
    {
        for (int j=i+1; j<nums.size(); j++)
        {
            if (nums[i] + nums[j] == target)
            {
                a = i;
                b = j;
            }
        }
    }
    return {a, b};
    }
};
Run Code Online (Sandbox Code Playgroud)

c++ constructor return initializer-list stdinitializerlist

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

在向量构造函数中从initializer_list&lt;const char*&gt; 到initializer_list&lt;string&gt; 的转换

std::vector\xe2\x80\x98s 初始值设定项列表构造函数具有以下形式

\n
vector( std::initializer_list<T> init, const Allocator& alloc = Allocator() );\n
Run Code Online (Sandbox Code Playgroud)\n

是什么使得这样的初始化std::vector<string> vec{ \xe2\x80\x9cfoo\xe2\x80\x9d, \xe2\x80\x9cbar\xe2\x80\x9d };成为可能?为什么构造函数接受一个std::initializer_list<const char*>,即使std::vectors\xe2\x80\x98sTstd::stringstd::initializer_list<const char*>从到 的转换在哪里以及如何进行std::initializer_list<string>发生?

\n

c++ implicit-conversion c++11 stdinitializerlist braced-init-list

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

是否可以从函数返回 std::initializer_list ?

以下作品:

struct A {
    int i;
    int v;
};

std::initializer_list<A> getList() {
    return {A{0,1}, A{2,3}};
}

int main() {
    auto list = getList();
}
Run Code Online (Sandbox Code Playgroud)

我可以验证列表的内容是否正确。

但是,如果我将成员更改v为 a std::vector,则它不起作用:

struct A {
    int i;
    std::vector<int> v;
};

std::initializer_list<A> getList() {
    return {A{0,{1,2}}, A{3,{4,5}}};
}
Run Code Online (Sandbox Code Playgroud)

在这种情况下,返回的列表包含垃圾值。

我知道标准说复制 a 时不会复制底层对象std::initializer_list。这是这里发生的事情吗?

为什么它在第一个示例中有效?是运气吗?当列表中的对象包含 a 时,情况有什么特别吗std::vector

c++ return-value c++11 stdinitializerlist

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

如何将 std::initializer_list 分配给向量

这是一个需要 an 的构造函数std::initializer_list,我想将它分配给一个向量。我是否需要使用for-loop 将 中的每一项std::initializer_list逐一分配给向量?

Motor_Group::Motor_Group(std::initializer_list<pros::Motor> port_set)
{
  this->motor_vector = port_set;
}
Run Code Online (Sandbox Code Playgroud)

c++ stdvector stdinitializerlist

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

初始化列表是否足够静态以允许实例化模板?

我为这个错误的问题道歉。我不知道该怎么问。

#include <iostream>

template <int V>
void output() {
  std::cout << V << "\n";
}

int main() {

  output<1>(); // this works
  output<2>();

  for (int v : {1,2,3} ) {
    output<v>(); // this not
  }
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

我认为有限次数的迭代足以使该模板化函数实例化,但事实并非如此。

有没有办法让它发挥作用?

c++ templates compile-time-constant c++11 stdinitializerlist

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

vector 类如何接受多个参数并从中创建一个数组?

矢量示例

vector<int> a{ 1,3,2 }; // initialize vectors directly  from elements
for (auto example : a)
{
    cout << example << " ";   // print 1 5 46 89
}
MinHeap<int> p{ 1,5,6,8 };    // i want to do the same with my custom class   
Run Code Online (Sandbox Code Playgroud)

知道如何在大括号中接受多个参数并形成一个数组吗?

std::vectorclass 用于std::allocator分配内存,但我不知道如何在自定义类中使用它。 VS Code 显示std::allocator

我做了同样的事情,但它不像那样工作

template<typename T>
class MinHeap
{
    // ...
public:
    MinHeap(size_t size, const allocator<T>& a)
    {
        cout << a.max_size << endl;
    }
    // ...
};
Run Code Online (Sandbox Code Playgroud)

菜鸟在这里....

c++ stdvector class-template c++11 stdinitializerlist

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

构造函数中的初始化列表问题

我很难理解它是如何std::initializer_list工作的。我检查了其他问题,但没有发现任何相关内容(或者也许我没有看到它?)。

假设我有这个:

template<typename T> 
struct Point
{
    T x,y;
};

template<typename T> 
struct A
{
    std::vector<Point<T>> v;
};
Run Code Online (Sandbox Code Playgroud)

然后我可以构建:

int main()
{
   A<int> a{ std::vector<Point<int>> { {4,4}, {5,5},{6,6} } };
}
Run Code Online (Sandbox Code Playgroud)

但我想让事情变得更简单,所以我可以写:

int main()
{
   A<int> a( { {4,4}, {5,5},{6,6} } );
}
Run Code Online (Sandbox Code Playgroud)

我试过:

template<typename T> 
struct A
{
    std::vector<Point<T>> v;
    template<typename U>
    A( const std::initializer_list<Point<U>>& il ) : v{il}
    {}
};
Run Code Online (Sandbox Code Playgroud)

但这失败了,请参阅现场演示

我怎样才能编写一个允许这样做的构造函数?这可能吗?

c++ initializer-list c++11 stdinitializerlist

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