【问题标题】:C++ error when instantiating a vector of int arrays (vector<array<int, 3>>)实例化 int 数组向量时出现 C++ 错误 (vector<array<int, 3>>)
【发布时间】:2020-08-19 11:13:15
【问题描述】:

我是 C++ 新手,所以这可能只是一个简单的错误,但是当我尝试创建整数数组的向量时,例如 vector &lt;array&lt;int, 3&gt;&gt; triangles = ({0, 1, 2}, {3, 4, 12});,我得到了这个错误:

error: expected ';' before '}' token
       vector <array<int, 3>> triangles = ({0, 1, 2}, {3, 4, 12});
                                                   ^

我正在使用 CLion 2020.1.1 中包含的 CMake 版本进行编译。完整的脚本如下:

#include <iostream>
#include <vector>
#include <array>
using namespace std;

int main() {

    vector<array<int, 3>> triangles = ({1,2,3},{2,3,4});
    cout << triangles;

    return 0;
};

谢谢,非常感谢您的帮助:)

【问题讨论】:

  • 在您的构造函数调用中将() 替换为{}。另外,你不能coutstd::vector(像那样)。
  • 你应该使用大括号{}
  • @Mansoor 答案应该放在答案部分。谢谢。
  • @AsteroidsWithWings 微不足道,但足够公平。
  • @Mansoor 琐碎无关紧要:)

标签: c++ arrays vector


【解决方案1】:

您应该使用花括号来代替方括号 ({1,2,3},{2,3,4}):{{1,2,3},{2,3,4}} ;

矢量也没有默认的运算符 - 您必须自己定义。

#include <iostream>
#include <vector>
#include <array>
using namespace std;

int main() {

    vector<array<int, 3>> triangles = {{1,2,3},{2,3,4}};
    //cout << triangles;  // there is no default operator<< for vector - you have to define one on yourself

    return 0;
}

例如:

#include <iostream>
#include <vector>
#include <array>
using namespace std;

using MyContainer = vector<array<int,3>>;  // using type-alias for making life easier

ostream& operator<<(ostream& os, const MyContainer& v)
{
    for (const auto& arr : v)
    {
        for (const auto& el : arr)
            os << el << " ";
        os << "\n";
    }
    
    return os;
}

int main() {
    
    MyContainer triangles {{1,2,3},{2,3,4}};
    //cout << triangles;  // there is no default operator<< for vector - you have to define one on yourself
    cout << triangles;

    return 0;
}

输出:

1 2 3 
2 3 4 

【讨论】:

    【解决方案2】:

    您的语法不正确,因此出现错误。

    尝试以下方法:

    int main() {
    
        vector<array<int, 3>> triangles {{1,2,3},{2,3,4}};
        //cout << triangles;
        for (const auto& triangle : triangles)
            for (const auto i : triangle)
                cout << i << '\n';
    
        return 0;
    };
    

    此外,您不能直接输出vector。你必须遍历它的元素并一个一个地打印出来。

    vector&lt;array&lt;int, 3&gt;&gt; triangles {{1,2,3},{2,3,4}}; 语法称为“直接列表初始化”,而vector&lt;array&lt;int, 3&gt;&gt; triangles = {{1,2,3},{2,3,4}}; 是“复制列表初始化”。在此处阅读有关它们的更多信息:Differences between direct-list-initialization and copy-list-initialization

    【讨论】:

      【解决方案3】:
       #include <iostream>
       #include <vector>
       #include <array>
       #include <algorithm>
       using namespace std;
      
       int main() {
      
           vector<array<int, 3>> triangles = {{1,2,3},{2,3,4}};
           
           for_each (triangles.begin(), triangles.end(), [](array<int,3> arr) {for (int item2 :arr) {cout << "[" << item2 << "]"<< endl; ;}});
      
           return 0;
       };
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-03-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多