C ++에서 배열을 선언하는 방법은 무엇입니까?
가능한 최선의 방법으로 정적 배열의 모든 요소를 배열합니다. 한 줄에 선언하고 쉽게 추가를 추적 할 수 있습니다. 정말 간단하지 않나요?
가능한 비 해결 방법 :
vector<string> v;
v.push_back("abc");
b.push_back("xyz");
for(int i = 0; i < v.size(); i++)
cout << v[i] << endl;
한 줄에 벡터를 생성하는 방법이 없습니다.
가능한 비 해결 방법 2 :
string list[] = {"abc", "xyz"};
문제-문자열 수를 자동으로 수있는 방법이 없습니다 (내가 알고있는).
이를 수행하는 쉬운 방법이됩니다.
부스트 할당 라이브러리는 당신이 찾고있는 정확하게 것 같다. 컨테이너에 상수를 어느 때보 다 쉽게 할당 할 수 있습니다.
C ++ 11은 다음 구문을 허용하는 초기화 목록을 추가했습니다.
std::vector<std::string> v = {"Hello", "World"};
이 C ++ 11 기능에 대한 지원은 GCC 4.4 이상 및 Visual Studio 2013 에서만 추가되었습니다 .
vector<string>
정적으로 생성 된 char*
배열 에서 간결하게 초기화 할 수 있습니다 .
char* strarray[] = {"hey", "sup", "dogg"};
vector<string> strvector(strarray, strarray + 3);
그건 그렇고 모든 메모리를 사용합니다. Will Dean의 제안을 사용하여 여기서 매직 넘버 3을 arraysize (str_array)로 대체 할 수 있습니다. 특정 버전의 arraysize가 뭔가 나쁜 일을 할 수있는 특별한 경우가 있음을 기억합니다 (미안하지만 즉시 세부 사항을 기억할 수 없습니다). 그러나 매우 자주 작동합니다.
또한, 한 줄에 활동하는 경우 궁호라면, 매크로를 정의하여 한 줄이 DEFINE_STR_VEC(strvector, "hi", "there", "everyone");
작동 하도록 할 수 있습니다 .
문제-문자열 수를 자동으로 방법이 없습니다 (내가 알고있는).
많은 사람들 (MS 포함)이 다음과 같은 매크로를 정의하는 늪지 표준 방법이 있습니다 arraysize
.
#define arraysize(ar) (sizeof(ar) / sizeof(ar[0]))
다음과 같이 C ++에서 배열을 선언합니다. char array_of_strings[][]
예 : char array_of_strings[200][8192];
각 크기는 8kb 또는 8192 바이트입니다.
strcpy(line[i],tempBuffer);
상위 배열에 데이터를 넣는 데 사용 합니다.
한 가지 가능성은 NULL 포인터를 플래그 값으로 사용하는 것입니다.
const char *list[] = {"dog", "cat", NULL};
for (char **iList = list; *iList != NULL; ++iList)
{
cout << *iList;
}
부스트 범위 라이브러리 의 begin
및 end
함수를 사용하여 기본 배열의 끝을 쉽게 사용할 수 있고, 매크로 솔루션과 달리 실수로 포인터에 적용하면 잘못된 동작 대신 오류가 발생합니다.
const char* array[] = { "cat", "dog", "horse" };
vector<string> vec(begin(array), end(array));
Will Dean의 제안 [
#define arraysize(ar) (sizeof(ar) / sizeof(ar[0]))
]을 사용하여 여기서 매직 넘버 3을 arraysize (str_array)로 변경할 수 있습니다. 특정 버전의 배열 크기가 뭔가 나쁜 일을 할 수있는 특별한 경우가있는 것이 기억하지만 (미안하지만 세부 사항을 기억할 수 없습니다. 바로). 그러나 매우 자주 작동합니다.
작동하지 않는 경우는 "배열"이 실제 배열이 아닌 포인터 일 때입니다. -방식의 배열이 (첫 번째 요소에 대한 포인터로 변환) 함수에 전달되기 때문에 또한 작동하지에서 작업 배열과 같은 서명 보이는 경우에도 호출하지 some_function(string parameter[])
정말 some_function(string *parameter)
.
boost :: 배정을 받았던 Craig H의 답변을 찬성하려고 시도했지만 없습니다. :(
나는 Andrei Alexandrescu가 C / C ++ Users Journal , Vol 16, No 9, September 1998, pp. 73-74 에서 읽은 첫 번째 기사에서 유사한 기술을 접했습니다 (내 구현에 대한 주석에 있으므로 전체 인용 그 이후로 사용해온 그의 코드).
템플릿은 친구입니다.
예를 들면 다음과 같습니다.
#include <iostream>
#include <string>
#include <vector>
#include <iterator>
int main() {
const char* const list[] = {"zip", "zam", "bam"};
const size_t len = sizeof(list) / sizeof(list[0]);
for (size_t i = 0; i < len; ++i)
std::cout << list[i] << "\n";
const std::vector<string> v(list, list + len);
std::copy(v.begin(), v.end(), std::ostream_iterator<string>(std::cout, "\n"));
}
해당 매크로 대신 다음을 제안 할 수 있습니다.
template<typename T, int N>
inline size_t array_size(T(&)[N])
{
return N;
}
#define ARRAY_SIZE(X) (sizeof(array_size(X)) ? (sizeof(X) / sizeof((X)[0])) : -1)
1) 매크로를 사용하여 컴파일 시간 상수로 만들고 싶습니다. 함수 호출의 결과는 컴파일 타임 상수가 아닙니다.
2) 그러나 매크로가 실수로 포인터에 사용될 수 있으므로 매크로를 사용하고 싶지 않습니다. 이 함수는 컴파일 타임 배열에서만 사용할 수 있습니다.
따라서 우리는 매크로를 "안전"하게 만들기 위해 함수의 정의성을 사용합니다. 함수가 존재하는 경우 (즉, 크기가 0이 아닌 경우) 위와 같이 매크로를 사용합니다. 함수가 존재하지 않으면 잘못된 값을 반환합니다.
#include <boost/foreach.hpp>
const char* list[] = {"abc", "xyz"};
BOOST_FOREACH(const char* str, list)
{
cout << str << endl;
}
#include <iostream>
#include <string>
#include <vector>
#include <boost/assign/list_of.hpp>
int main()
{
const std::vector< std::string > v = boost::assign::list_of( "abc" )( "xyz" );
std::copy(
v.begin(),
v.end(),
std::ostream_iterator< std::string >( std::cout, "\n" ) );
}
#include <iostream.h>
#include <iomanip.h>
int main()
{
int n;
cout<<"enter the maximum number\n";
cin>>n;
cout<<"enter the first number\n";
for(int i=0;i<n;i++)
{
for(int j=0;j<n;j++)
{
cin>>a[i][j];
}
}
cout<<"enter the second number\n";
for(int i=0;i<n;i++)
{
for(int k=0;k<n;k++)
{
cin>>b[i][k];
}
}
cout<<"the product will be\n";
for(int i=0;i<n;i++)
{
for(int g=0;g<n;g++)
{
c[i][g]=c[i][c]*c[i][j];
cout<<setw(5)<<c[i][g];
}
cout<<endl;
}
return 0;
}
같은 문자열 배열을 직접 선언 할 수 있습니다 string s[100];
. 그런 다음 특정 요소에 액세스하려면 s[2][90]
. 반복을 위해 s[i].size()
함수를 사용하여 문자열 크기를 가져옵니다 .
참고 URL : https://stackoverflow.com/questions/34987/how-to-declare-an-array-of-strings-in-c
'IT' 카테고리의 다른 글
OAuth 2.0 인증 헤더 (0) | 2020.09.15 |
---|---|
OS X Mavericks 용 Eclipse Kepler, Java SE 6 요청 (0) | 2020.09.15 |
iPhone : 기본적으로 UITableView 검색 창 패키지 (0) | 2020.09.15 |
WPF : TextBox에서 프로그래밍 방식으로 포커스를 제거하는 방법 (0) | 2020.09.15 |
Java에서 null은 무엇입니까? (0) | 2020.09.15 |