实例化 int 数组的向量时C++错误(vector<array<int, 3>>)



我是C++新手,所以这可能只是一个简单的错误,但是当我尝试创建整数数组向量时,例如vector <array<int, 3>> 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;
};

谢谢,非常感谢任何帮助:)

您应该对初始值设定项列表使用大括号而不是括号 ({1,2,3},{2,3,4}):{{1,2,3},{2,3,4}};

此外,对于向量<<</strong>也没有默认运算符 - 您必须定义自己的运算符。

#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 

您的语法不正确,因此存在错误。

请尝试以下操作:

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<array<int, 3>> triangles {{1,2,3},{2,3,4}};语法称为"直接列表初始化",而vector<array<int, 3>> triangles = {{1,2,3},{2,3,4}};语法称为"复制列表初始化"。在此处阅读有关它们的更多信息:直接列表初始化和复制列表初始化之间的差异

#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;
};

最新更新