我编写了一些JavaScript代码,但现在我想将其转换为C ++,因为它具有性能,但我对C ++的了解很少。
在JavaScript中,我可以这样做:
var arr=[[['à','á'],['è','é'],['ì','í'],['ò','ó'],['ù','ú']],['a','e','i','o','u']];
我怎样才能在C ++中做类似的事情? 我必须做什么
vector<vector<char>> arr;
然后手动设置每个元素?
arr[0][0]='à';
arr[0][1]='á';
...
答案 0 :(得分:7)
是的,除非你有C ++ 11,否则它至少会有一些工作,这增加了构造函数获取初始化列表的可能性:
std::vector<std::vector<char>> arr {{'a', 'b'}, {'c', 'd', 'e'}, {'f'}};
您也可以考虑将std::vector<char>
替换为std::string
。
答案 1 :(得分:2)
这适用于C ++ 11
std::vector<std::vector<char>> var arr={{'à','á'},{'è','é'},{'ì','í'},{'ò','ó'},{'ù','ú'},{'a','e','i','o','u'}};
// Note it is changed from the original I removed one level of nesting from part of the array.
如果您使用的是C ++ 03 然后你需要稍微改变一下。
std::string var[] = {"àá'", "èé", "ìí", "òó", "ùú", "aeiou"};
类型有变化但效果相同,对象var
的访问权限不变。
答案 2 :(得分:2)
或者,您可以使用std::vector< std::pair< char, char > >
。
注意,您不能在空向量上使用operator[]
(即调用arr[0]
或arr[0][0]
(因为请求的元素不在那里,您访问无效的内存(希望如此)会使你的程序崩溃)。使用push_back(...)
:
vector< pair< char, char > > arr;
arr.push_back( make_pair( 'à','á' ) );
arr.push_back( make_pair( 'è','é' ) );
arr.push_back( make_pair( 'ì','í' ) );
arr.push_back( make_pair( 'ò','ó' ) );
arr.push_back( make_pair( 'ò','ó' ) );
arr.push_back( make_pair( 'ù','ú' ) );
根据您的要求,std::map< char, char >
也可能对您有用。它允许您使用第一种类型作为键来访问元素,例如
std::map<char, char > mymap;
mymap['à'] = 'á';
// will print "Element à = à"
cout << "Element à = " << mymap['à'] << endl;
答案 3 :(得分:1)
不幸的是,您无法将矢量初始化为数组。但是,您可以使用数组初始化矢量。对于单个载体:
static const int arr[] = {1,2,3,4};
vector<int> vec (arr, arr + sizeof(arr) / sizeof(arr[0]) );
初始化向量向量有点棘手,但是您可以像上面那样在一个循环中执行它,或者像这样:(伪代码):
for( int i =0; i < something; i++ )//the outer vector
{
vector.pushBack( std::vector<int> );
for( int j =0; j < somethingElse; j++)
vector[i].push_back(j);
}
答案 4 :(得分:0)
这是使用c ++ 0x的代码片段:
#include <vector>
#include <iostream>
using namespace std;
int main(){
vector< vector<char> > v = { {'a','b','c'}, {'d','e','f'} };
for (unsigned i=0; i<v.size(); i++){
cout <<"Subvector: ";
for (unsigned j=0; j<v[i].size(); j++)
cout << v[i][j];
cout << endl;
}
return 0;
}
用g ++ -std = c ++ 0x
编译它